java中子类继承父类,实例化子类前要先为父类初始化的问题~

2025-02-27 09:33:25
推荐回答(5个)
回答1:

不是这个意思。所谓“实例化子类的对象前要先实例化父类中的内容,为父类初始化”,是指当子类正在实例化时,总是链式调用父类构造方法初始化父类空间。换句话说,子类的构造方法必须先调用父类的构造方法,完了才能干别的初始化工作。如果子类没有显式调用语句,编译器会隐式帮你加上。

如:

public class A
{
    public A()
    {
    }
}
public class B extends A
{
    public B()
    {
    }
}

等价于:

public class A
{
    public A()
    {
        super();//这里实际上是Object();
        //其他初始化工作
    }
}
public class B extends A
{
    public B()
    {
        super();//这里实际上是A();
        //其他初始化工作
    }
}

另外,如果有这种情况:

public class A
{
    X x=new X();
    public A()
    {
    }
}
public class B extends A
{
    Y y=new Y();
    public B()
    {//这是类A空间里的字段都已经初始化完毕。
    }
}

在成员y被赋值之前,x一定已经存在。换句话说,X x=new X();一定先于Y y=new Y();执行。

回答2:

你要明白,new B()的实际是调用了构造方法。而子类的构造方法一定会调用父类的构造方法的。所以你在new B() 的时候,实际上同时也调用了父类的构造方法 new A()。

回答3:

你可以理解为子类实际上是父类+扩展
实例化子类的时候 是先初始化父类再初始化扩展

回答4:

public class A {
public A() {
System.out.println("初始化A..");
}

public static void main(String[] args) {
B a = new B();
}
}

class B extends A {
public B() {
System.out.println("初始化B..");
}
}

回答5:

A a = new B(),只初始化了子类