如果我们创建子类的对象,是否会创建父类的对象?

时间:2018-04-03 10:21:32

标签: java inheritance

我知道每次创建子类对象时都会调用super。但是,我特别想知道的是它会加载类还是会创建该父类的对象。

提前致谢。

4 个答案:

答案 0 :(得分:2)

你有一个单个对象 在实例化类时,它会调用父类的构造函数 first 。对于每个父类,它遵循相同的逻辑:它调用第一个父类的构造函数。

假设:A扩展B扩展C

new A()会导致调用B构造函数的C构造函数调用。
作为C,然后返回B构造函数调用,A构造函数可以继续,并创建实例A

  

但是,我特别想知道的是它会加载课程   或者它会创建该父类的对象。

与构造函数执行类似,在加载类之前,必须为每个父类递归加载其父类first

此处与A对应的类扩展B扩展C

class C {
    public C(){    
        System.out.println("C constructor");
    }
}

class B extends C{
    public B() {
        System.out.println("B constructor");
    }

}
class A extends B{
    public A() {
        System.out.println("A constructor");
    }
}


public class Test {
    public static void main(String[] args) {
        new A();
    }
}

编译这些类,然后执行Test类,在A方法中通过指定main()标志创建-verbose实例(默认情况下启用类日志)在java命令中:

java -verbose Test

你应该在输出标准中看到类似的东西:

[Loaded java.lang.Object from C:\...]
[Loaded java.io.Serializable from C:\...]
... // load all classes required until loaded C, B and A classes
[Loaded C from file:/C:/...]
[Loaded B from file:/C:/...]
[Loaded A from file:/C:/...]
C constructor
B constructor
A constructor

确认:

  • 需要首先通过根父类(Object)开始加载父类,直到最近的父类(B)。
  • 在加载层次结构的所有类之前没有执行构造函数
  • 父类的构造函数始终在实例化类的构造函数之前执行,方法是从根父构造函数(Object)开始,直到最接近的父构造函数(B)。

答案 1 :(得分:1)

调用构造函数,因此创建父类的对象。稍后使用该对象来构建子类的对象。原因是子类的对象是父类的对象,有更多的东西。

答案 2 :(得分:1)

因为子类从父类继承属性和方法,所以整个类层次结构(包括超类和已实现的接口)都已加载

创建子类的实例时,只创建(实例化)类型为childclass的单个对象。没有任何父母的其他实例。

在父类上声明的属性和方法可以通过子类实例访问,并且由于这种继承,子类实例将被接受为任何期望父实例(或它或任何父实例的任何接口)的方法的参数器具)。

如果您认为代码是合同设计,那么这很有道理:

  • 父类声明确定某些方法可用于调用自身或其任何子级。接口也是如此。
    例如,现实世界中的所有雇佣合同都必须包含某些条款,但其余的由公司决定。
  • 通过继承(extendsimplements保证,孩子也会自动提供相同的方法。
    例如,我们可以假设任何遵守法律的公司将提供包括这些条款在内的雇佣合同,并且(一旦同意)签署您和公司的签名。
  • 需要加载整个层次结构才能理解完整的合同。
    例如,如果存在争议,审查合同的律师将检查法律规定的内容或许可以通过查看立法机构提供的样本合同。 parentClass是问题中的样本。
  • 我们只需要一个对象实例。
    例如您没有获得两份就业合同,一份是基本合同,另一份是更多信息。您将收到并签署一份文件。
  • 最后,在我的模拟中,任何雇佣合同(无论如何措辞)都可以被任何代理机构接受,要求您证明您与雇用您的公司的关系(假设它合法且有效,包含合法的规定的条款和适当的签名)。

答案 3 :(得分:0)

当您第一次加载一个类时,它的所有祖先也会以递归方式加载。

实例化对象时,不会实例化其父对象的其他实例。但是,您刚刚实例化的对象本身也是父实例。