在一般情況一下年鸳,子類可以調(diào)用父類的方法,因?yàn)樽宇惱^承父類丸相,會(huì)獲得父類的成員變量和方法搔确,但父類不可以調(diào)用子類的方法,因?yàn)楦割悷o(wú)從知道它將被哪一個(gè)子類繼承。
但是有一種特殊情況膳算,當(dāng)子類方法重寫父類的方法后座硕,父類表面上只是調(diào)用自己的方法,但是該方法已經(jīng)被子類方法重寫了涕蜂,隨著上下文的改變华匾,將會(huì)出現(xiàn)父類調(diào)用子類的情況。
class Animal{
//desc實(shí)例變量保存對(duì)象toString方法的返回值
private String desc;
public Animal(){
this.desc=getDesc();
}
public String getDesc(){
return"Animal";
}
public String toString(){
return desc;
}
}
public class Wolf extends Animal{
private String name;
private double weight;
public Wolf(String name, double weight) {
this.name = name;
this.weight = weight;
}
//重寫getDesc方法
@Override
public String getDesc() {
return "Wolf [name=" + name + ", weight=" + weight + "]";
}
public static void main(String[] args) {
System.out.println(new Wolf("灰太狼",32.3));
}
}
此處代碼運(yùn)行結(jié)果為Wolf [name=null, weight=0.0]机隙。有人可能會(huì)問為什么不是"灰太狼",32.3瘦真?