如果我有Class A和ClassB,则扩展ClassA。当ClassB尝试访问ClassA的属性,方法等时,ClassA实例是否会自动创建?

如果是这样,如果ClassA是抽象类会发生什么?我们不能手动创建抽象类的实例,但是JVM如何处理这种情况,或者ClassB如何尝试在没有ClassA实例的情况下访问ClassA的成员(自从它成为抽象类以来就创建了) )

最佳答案

没有ClassB,ClassA不能单独存在。必须通过new运算符创建Class的实例。要获得B的实例,必须在系统中的某个地方进行调用,例如:

new ClassB();


如果仅存在以下呼叫:

new ClassA();


然后,不存在B的实例,因此ClassB中的任何内容(除静态方法之外)都是无关紧要的。为了简单起见,我忽略了通过反射创建新实例的方法。

继承从父级流到子级,因此子级可以访问父级上的公共方法,受保护方法或私有方法包(取决于ClassA和ClassB声明的包);但父级无法访问子级上的方法。但是,通过多态性,可以优先于子代上的方法执行子代上的方法。

我认为您应该阅读一些Java Tutorial

关于java - 在Java中,关键字extends是否要求派生类仅在创建父类实例时才继承属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6113330/

10-12 05:09