多重继承的泥潭——实例化了哪个类?

假设我有以下课程:


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;

        }

    }

}

提供一些上下文:

  • 所有这些类都驻留在同一个包中。

  • CD在编译时生成

  • A以及C永远不会被实例化;他们只是为类提供一些行为B

  • B是唯一实际使用的类。

  • D在编译时之前是未知的,这就是为什么我们只使用Cin B

这类似于人们在使用时可能期望的 google autovalue


我的问题是关于中的getInner功能B

  1. 哪个_Foo将在该行实例化return new C._Foo();?在_FooD或一个在A

  2. 这种未定义的行为是否被实例化或是否被记录?如果可能,请提供文件

  3. 顺序是如何确定的?

最后一个问题仅供参考,我最感兴趣的是前两个。

谢谢你的帮助。


FFIVE
浏览 155回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java