A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© houzhiming 中级黑马   /  2016-7-29 10:31  /  679 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

2 个回复

倒序浏览
这里讲的是继承关系如何分层初始化的问题
子类要 new 对象,会先访问父类的构造方法,而父类中的成员变量是私有的,子类访问不到,默认初始化成员变量值是null, 所以结果是两个null
再接着走子类构造,在这之前,会先对成员变量初始化, name = "dervied";
然后访问构造,所以后两个结果是 dervied

  
回复 使用道具 举报
前面两个null  我也解释错了,你看其他人的答案吧,我也来学习下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马