返回信息流class Base{
private String name = "base";
Base(){
tellName();
printName(name);
}
public void tellName(){
System.out.println("tell "+ name);
}
public void printName(String name){
System.out.println("print "+ name);
}
}
class Drived extends Base{
private String name = "Drived";
Drived(){
tellName();
printName(name);
}
public void tellName(){
System.out.println("tell "+ name);
}
public void printName(String name){
System.out.println("print "+ name);
}
}
public class TestObject {
public static void main(String args[]){
new Drived();
}
}
结果为:
tell null
print base
tell Drived
print Drived
我不是很明白为什么每一个name会是null,按照我的理解,应该会先初始化基类的变量,为什么会出现这种结果,求解答
这是一条镜像帖。来源:北邮人论坛 / java / #34553同步于 2014/9/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
Java 继承 私有成员变量 初始化顺序的问题(笔试题)
keita1314
2014/9/11镜像同步26 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
没有创建基类的对象 只会初始化基类static类型的变量吧
如果创建基类的对象,才会先初始化类的static变量和块 在初始化非static变量和块
再调用构造函数
【 在 keita1314 (dpdp) 的大作中提到: 】
: class Base{
: private String name = "base";
: Base(){
: ...................
【 在 wangxiaobupt 的大作中提到: 】
: 没有创建基类的对象 只会初始化基类static类型的变量吧
: 如果创建基类的对象,才会先初始化类的static变量和块 在初始化非static变量和块
: 再调用构造函数
: ...................
嗯,我也是这么理解,那为什么printName里面可以打印出?
没有初始化的默认就是null把
【 在 keita1314 (dpdp) 的大作中提到: 】
: 嗯,我也是这么理解,那为什么printName里面可以打印出?
楼主应该把子类的打印函数中的tell和print单词换成tellChild,printChild..就很容易发现,其实Base构造函数调用2个函数,都是调用了子类中的函数,这是构造函数中的多态....
【 在 keita1314 的大作中提到: 】
: class Base{
: private String name = "base";
: Base(){
: ...................