小编SD *_*haw的帖子

在java中,我们可以通过传递超类方法中使用的参数的子类来覆盖方法吗?

根据规则,在覆盖子类中的方法时,参数不能更改,并且必须与超类中的参数相同.如果我们在重写方法时传递参数的子类怎么办?是否会被称为超载或覆盖?

根据我的查询,我在下面写了一些代码.
我期待输出为"狗吃肉食"但令我惊讶的是输出是"动物吃肉食"如果有人可以解释当分配的对象是Dog类型时动物方法如何被调用,我将不胜感激?

    class Food {
        public String toString(){
            return "Normal Food";
        }
    }

    class Flesh extends Food {
        public String toString(){
            return "Flesh Food";
        }
    }

    class Animal {
        public void eat(Food food){
            System.out.println("Animal eats "+ food);
        }
    }

    class Dog extends Animal{

        public void eat(Flesh flesh){
            System.out.println("Dog eats "+ flesh);
        }
    }

    public class MyUtil {

        public static void main(String[] args) {

            Animal animal = new Dog(); 

            Flesh flesh = new Flesh();

            animal.eat(flesh);
        }
    }
Run Code Online (Sandbox Code Playgroud)

java overriding overloading

10
推荐指数
3
解决办法
1万
查看次数

标签 统计

java ×1

overloading ×1

overriding ×1