假设我有以下课程:
abstract class A {
static abstract class _Foo {}
}
class B extends A {
static void doSomething() {
System.out.println(C.saySomething());
}
static _Foo getInner() {
return new C._Foo();
}
static abstract class _Foo extends A._Foo {}
}
final class C extends D {
static String saySomething() {
return "Something";
}
}
abstract class D {
static class _Foo extends B._Foo {
public int value() {
return 42;
}
}
}
提供一些上下文:
- 所有这些类都驻留在同一个包中。
- 类
C
和D
在编译时生成 - 类
A
以及C
从不实例化;他们只是为课堂提供一些行为B
- 类
B
是唯一实际使用的。 - 类
D
在编译之后是未知的,这就是我们只使用C
in 的原因B
。
这类似于人们在使用google autovalue
我的问题是关于getInner
函数B
:
- 哪个
_Foo
将在该行被实例化return new C._Foo();
?_Foo
里面还是里面的D
那个A
? - 这种未定义的行为是关于实例化的还是记录在案的?如果可能,请提供文件
- 顺序是如何确定的?
最后一个问题仅供参考,我对前两个最感兴趣。
谢谢你的帮助。