Java: Is a class a subclass of itself?

2019-05-07 20:21发布

A class can be a "subclass" of itself if its inner class extend the outer class so the class is somehow extending itself without throwing any Exception. So, does it really mean a class is also a subclass of itself?

Thanks.

6条回答
何必那么认真
2楼-- · 2019-05-07 20:42

A class is not a subclass of itself. An inner class could be a subclass of some other class, but that is a separate class. You can verify this by comparing the Class instances you get when you call getClass().

查看更多
冷血范
3楼-- · 2019-05-07 20:52

Actually JVM doesn't now anything about inner classes.

All inner classes become usual classes after compilation but compiler gives them accessors to all fields of outer class.

In OOP theory, class cannot be its subclass or superclass.

查看更多
仙女界的扛把子
4楼-- · 2019-05-07 20:58

No. An inner class is something completely different from its outer class. Unless I am misunderstanding your question...

查看更多
啃猪蹄的小仙女
5楼-- · 2019-05-07 21:00

If you define a class subclassing itself as this:

public class Test {

    public static void main(String[] args) {
        // whatever...
    }

    class TestChild extends Test {
        // whatever...
    }
}

Then yes this is possible. But note that these are two entirely separate classes, barring the fact the one is inner to the other.

查看更多
smile是对你的礼貌
6楼-- · 2019-05-07 21:03
public class ParentClass {

    int intField = 10;

    class InnerClass extends ParentClass {

    }

    public static void main(String... args) {
        ParentClass parentClass = new ParentClass();
        InnerClass innerClass = parentClass.new InnerClass();

        System.out.println(innerClass.intField);

        InnerClass innerClass2 = innerClass.new InnerClass();
    }
}
查看更多
劳资没心,怎么记你
7楼-- · 2019-05-07 21:08

The definition of subclass is that it extends another class and inherits the state and behaviors from that class. A class cannot extend itself since it IS itself, so it is not a subclass. Inner classes are allowed to extend the outer class because those are two different classes.

查看更多
登录 后发表回答