这段代码执行为什么结果会是null

这段代码执行为什么结果会是null

问题描述:

代码:

public class Dervied extends Base {
    private String name = "dervied";
    public Dervied() {

        tellName();
        printName();
    }
    public void tellName() {
        System.out.println("Dervied tell name: " + name);
    }
    public void printName() {
        System.out.println("Dervied print name: " + name);
    }
    public static void main(String[] args){ 
        new Dervied();    
    }
}

class Base { 
    private String name = "base";
    public Base() {
        tellName();
        printName();
    } 
    public void tellName() {
        System.out.println("Base tell name: " + name);
    } 
    public void printName() {
        System.out.println("Base print name: " + name);
    }
}


执行结果

Dervied tell name: null
Dervied print name: null
Dervied tell name: dervied
Dervied print name: dervied

为什么会是null????

1、首先private是不会继承到新的对象里,所以不会出现“base”。
2、由于重写的缘故,在执行super的构造函数是,还是调用的子类方法,此时成员变量未初始化。

主方法中创建一个对象,此时会去调用该类构造器,该类有父类,所以会先去调用父类构造器,在构造器中调用了两个方法,其中的name是属于对象实例的属性,需要用对象调用,但此时还没有对象

路上说的比较清楚了,主要看一下super相关概念以及子类构造函数与父类构造函数之间的关系。