假设我有以下课程:
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
?
这种未定义的行为是否被实例化或是否被记录?如果可能,请提供文件
顺序是如何确定的?
最后一个问题仅供参考,我最感兴趣的是前两个。
谢谢你的帮助。
相关分类