调用被子类重写的方法

在一般情况一下,子类可以调用父类的方法,因为子类继承父类,会获得父类的成员变量和方法,但父类不可以调用子类的方法,因为父类无从知道它将被哪一个子类继承。
但是有一种特殊情况,当子类方法重写父类的方法后,父类表面上只是调用自己的方法,但是该方法已经被子类方法重写了,随着上下文的改变,将会出现父类调用子类的情况。

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?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容