Класс вложения против объявления класса
Есть ли обстоятельства, при которыхClass.getDeclaringClass
может дать другой результат отClass.getEnclosingClass
?
Я подумал, что это может быть связано с подклассом внешнего класса, создающим экземпляр внутреннего класса, который не был объявлен как статический, но я не смог получить разницу таким образом:
public class Main {
private static class StaticInnerClass {
}
private class MemberInnerClass {
}
private static class ChildClass extends Main {
}
public MemberInnerClass getMemberInnerClassInstance() {
return new MemberInnerClass();
}
public static void main(String[] args) {
System.out.println( StaticInnerClass.class.getDeclaringClass() );
System.out.println( StaticInnerClass.class.getEnclosingClass() );
System.out.println( MemberInnerClass.class.getDeclaringClass() );
System.out.println( MemberInnerClass.class.getEnclosingClass() );
System.out.println( new ChildClass().getMemberInnerClassInstance().getClass().getEnclosingClass() );
System.out.println( new ChildClass().getMemberInnerClassInstance().getClass().getDeclaringClass() );
}
}
Выход:
class Main
class Main
class Main
class Main
class Main
class Main