在一般情况一下,子类可以调用父类的方法,因为子类继承父类,会获得父类的成员变量和方法,但父类不可以调用子类的方法,因为父类无从知道它将被哪一个子类继承。
但是有一种特殊情况,当子类方法重写父类的方法后,父类表面上只是调用自己的方法,但是该方法已经被子类方法重写了,随着上下文的改变,将会出现父类调用子类的情况。
class Animal{
//desc实例变量保存对象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));
}
}
此处代码运行结果为Wolf [name=null, weight=0.0]。有人可能会问为什么不是"灰太狼",32.3?