美文网首页
调用被子类重写的方法

调用被子类重写的方法

作者: 李霖神谷 | 来源:发表于2017-03-22 15:06 被阅读35次

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

    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?

    相关文章

      网友评论

          本文标题:调用被子类重写的方法

          本文链接:https://www.haomeiwen.com/subject/cmyonttx.html