В начале нужно четко понять что же мы хотим сделать. Логика следующая:[
1)Есть некий класс A;
2)Есть некий класс B, внутренний для класса A;
3)Мы хотим создать класс C, наследующийся от класса А и ещё раз описать в классе С класс В.
public class InnerOver { public InnerOver() { System.out.println("Конструктор в InnerOver"); new InnClass(); } protected class InnClass{ public InnClass() { System.out.println("Внутренний класс в InnerOver"); } } }
public class TestInnerOver extends InnerOver { public TestInnerOver() { System.out.println("Конструктор TestInnerClass"); } public class InnClass{ public InnClass() { System.out.println("Внутренний переопределённый класс в TestInnerOver"); } } public static void main(String[] args) { new TestInnerOver(); System.out.println("========================"); // Для создания "переопределённого" внутреннего класса пользуемся экземпляром потомка new TestInnerOver().new InnClass(); System.out.println("========================"); // Для создания внутреннего класса из родителя вызываем его через создание экземпляра супер-класса new InnerOver().new InnClass(); System.out.println("========================"); } }
Вывод: Конструктор в InnerOver Внутренний класс в InnerOver Конструктор TestInnerClass ======================== Конструктор в InnerOver Внутренний класс в InnerOver Конструктор TestInnerClass Внутренний переопределённый класс в TestInnerOver ======================== Конструктор в InnerOver Внутренний класс в InnerOver Внутренний класс в InnerOver ========================
Из примера видно что повторное описание внутреннего класса — это не более чем работа с пространством имён. Итог — внутренний класс, подобно методам, переопределить нельзя.
Комментарии: