继承输出

/**
* 父类
* @author rongxinhua
*
*/
public class Father{
private String name="FATHER";
public Father(){
whoAmI();
tellName(name);
}
public void whoAmI(){
System.out.println("Father says, I am " + name);
}
public void tellName(String name){
System.out.println("Father's name is " + name);
}
}


/**
* 子类
* @author rongxinhua
*
*/
public class Son extends Father{
private String name="SON";
public Son(){
whoAmI();
tellName(name);
}
public void whoAmI(){
System.out.println("Son says, I am " + name);
}
public void tellName(String name){
System.out.println("Son's name is " + name);
}
}


public class Client {
public static void main(String args[]) {
Father who = new Son();
}
}


Son says, I am null
Son's name is FATHER
Son says, I am SON
Son's name is SON

后面两项输出应该都能理解,主要是前面两项,分享一下我的理解:
new Son() 时,首先初始调用父类的<init>方法(这是必然的,既使没有继承任何类的类也会调用 Object 的<init>方法),这样就执行到 Father 类的 <init> 方法,首先是成员变量的初始化,private String name="FATHER",然后执行 whoAmI(),因为 Son overwrite 了这个方法,所以实际执行 Son 的 whoAmI() 方法,Son 的 whoAmI() 方法中使用了 name 变量,这里用的实际是 Son 的 name 变量,这个时候还没有初始化,所以是 null ,这就是第一行输出;然后是 tellName(name),当然也是执行的 Son 的 tellName(name) 方法,不同的是传了参数 name 进来,这个 name 是 Father 里的 name ,值是 "FATHER",于是就是第二行输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值