Java: Является ли класс подклассом? - PullRequest
4 голосов
/ 08 мая 2009

Класс может быть «подклассом» самого себя, если его внутренний класс расширяет внешний класс поэтому класс каким-то образом расширяет себя, не выбрасывая исключений. Так значит ли это, что класс также является подклассом сам по себе?

Спасибо.

Ответы [ 6 ]

7 голосов
/ 08 мая 2009

Класс не является подклассом сам по себе. Внутренний класс может быть подклассом некоторого другого класса, но это отдельный класс. Вы можете убедиться в этом, сравнив экземпляры Class, которые вы получаете, когда вызываете getClass ().

3 голосов
/ 08 мая 2009
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();
    }
}
3 голосов
/ 08 мая 2009

Определение подкласса состоит в том, что он расширяет другой класс и наследует состояние и поведение этого класса. Класс не может расширять себя, так как он сам, поэтому он не является подклассом. Внутренним классам разрешено расширять внешний класс, потому что это два разных класса.

2 голосов
/ 08 мая 2009

На самом деле JVM ничего не говорит о внутренних классах.

Все внутренние классы становятся обычными классами после компиляции, но компилятор предоставляет им доступ ко всем полям внешнего класса.

В теории ООП класс не может быть его подклассом или суперклассом.

1 голос
/ 08 мая 2009

Нет. Внутренний класс - это нечто совершенно отличное от внешнего. Если я не понимаю ваш вопрос ...

0 голосов
/ 08 мая 2009

Если вы определяете сам подкласс класса как этот:

public class Test {

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

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

Тогда да, это возможно. Но обратите внимание, что это два совершенно разных класса, за исключением того факта, что один является внутренним для другого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...