黑马程序员技术交流社区

标题: 结果,,,好像不太对。 [打印本页]

作者: houzhiming    时间: 2016-7-29 10:31
标题: 结果,,,好像不太对。
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
作者: lbx95272006    时间: 2016-7-29 10:56
这里讲的是继承关系如何分层初始化的问题
子类要 new 对象,会先访问父类的构造方法,而父类中的成员变量是私有的,子类访问不到,默认初始化成员变量值是null, 所以结果是两个null
再接着走子类构造,在这之前,会先对成员变量初始化, name = "dervied";
然后访问构造,所以后两个结果是 dervied

  

作者: lbx95272006    时间: 2016-7-29 11:25
前面两个null  我也解释错了,你看其他人的答案吧,我也来学习下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2