Нестатический внутренний класс может обращаться ко всем методам включающего класса, как если бы это были его собственные методы:
public class Test {
public int getOne() {
return 1;
}
public class Inner {
public int getEnclosingOne() {
return getOne(); // this works...
}
}
}
Статический внутренний класс не может, так как статический внутренний класс не связан сэкземпляр родительского класса.Это может вызывать только статические методы в классе включения.
Что касается методов, учитывающих наследование, то метод в нестатическом внутреннем классе может использовать все методы вмещающего (внешнего) класса.
Интересная часть - Test2.super.getOne()
, которая действительно получает getOne () из Test2.super
, то есть Test
.Это так же, как Test2 будет обращаться к методу, а именно, используя super
, хотя с префиксом Test2
, чтобы указать, что вы обращаетесь к пространству имен внешнего класса.
public class Test2 extends Test {
public int getInnerOuterParentOne() {
Inner2 inner2 = new Inner2();
return inner2.getOuterParentOne();
}
public int getInnerOuterOne() {
Inner2 inner2 = new Inner2();
return inner2.getOuterOne();
}
public int getOne() {
return 2;
}
public class Inner2 {
public int getOuterOne() {
return getOne();
}
public int getOuterParentOne() {
return Test2.super.getOne();
}
}
public static void main(String[] args) {
Test2 test2 = new Test2();
System.out.println(test2.getInnerOuterOne()); // 2
System.out.println(test2.getInnerOuterParentOne()); // 1
}
}