如果我有A类,ClassB扩展ClassA。当ClassB尝试访问ClassA的属性,方法等时,是否会自动创建ClassA实例?
如果是这样,如果ClassA是一个抽象类会发生什么?我们不能手动创建抽象类的实例但是JVM如何处理这个场景或者ClassB如何在没有ClassA实例的情况下尝试访问ClassA的成员(因为它是抽象类)
答案 0 :(得分:1)
没有ClassB,没有ClassA可以独立存在。必须通过new运算符创建Class的实例。要获得B的实例,必须在系统中调用,如:
new ClassB();
如果只有这样的电话:
new ClassA();
然后没有B的实例存在,所以ClassB中的任何东西(除了静态方法)都是无关紧要的。为简单起见,我忽略了通过反射创建新实例。
继承从父级传递到子级,因此子级可以访问父级的public,protected或package私有方法(取决于ClassA和ClassB的声明包);但是父母无法访问孩子的方法。但是,通过多态,可以优先于父方法执行子方法。
我认为你应该阅读一些Java Tutorial。
答案 1 :(得分:0)
当一个类在Java中扩展另一个类,然后被实例化时,只有一个对象被创建,并且该对象具有其父类型的所有方法和变量,在法律上允许它们继承。您不必实例化这两个对象。另一种表达方式是:
假设您有A类:
public class ClassA{
public int var1
private int var2
public void method1(){...}
private void method2(){...}
}
还有B班:
public class ClassB extends ClassA{
public int newVar1
public void newMethod1(){...}
}
实际上,B类实际上是这样的:
public class ClassB extends ClassA{
public int var1
public int newVar1
public void method1(){...}
public void newMethod1(){...}
}
答案 2 :(得分:0)
我有B扩展A,每当你创建一个B时,B 是 A所以A存在。它不作为单独的对象存在,但B是A,所以B具有A所具有的一切。 A可以在没有B的情况下存在。
如果A是抽象的,那么你就不能创建As。当你创建B时,它具有A的所有特性/方法,因为它是 A.