Java 为什么要将子类对象指定给超类引用?

Java 为什么要将子类对象指定给超类引用?,java,inheritance,polymorphism,Java,Inheritance,Polymorphism,动物是一个超类 猫是动物的一个亚类 猫是猫科动物的一个亚类 犬科动物是动物的一个亚类 狗是犬科动物的一个亚类 所有类都有自己的eat()方法,该方法输出: “(班级)正在吃饭” 我已经尝试过创建一个动物数组,遍历它们,并调用eat()方法,该方法为每个给定的动物输出正确的输出 我的问题是,这样做有什么好处: Cat j = new Animal(); 猫j=new Cat()是否会对动物类型的方法做任何需要做的事情,因为通过继承它已经是动物了 编辑:对不起,我的意思是相反的——一个人声明: 动

动物是一个超类

猫是动物的一个亚类

猫是猫科动物的一个亚类

犬科动物是动物的一个亚类

狗是犬科动物的一个亚类

所有类都有自己的eat()方法,该方法输出:

“(班级)正在吃饭”

我已经尝试过创建一个动物数组,遍历它们,并调用eat()方法,该方法为每个给定的动物输出正确的输出

我的问题是,这样做有什么好处:

Cat j = new Animal();
猫j=new Cat()是否会对动物类型的方法做任何需要做的事情,因为通过继承它已经是动物了

编辑:对不起,我的意思是相反的——一个人声明: 动物j=新猫()


对不起

通过同样的操作,我们实现了运行时多态性

将根据对象的类型调用重写的方法

现在来问你的问题

只有一句话可以回答这个问题

猫永远是动物

Animal a = new Cat();//ok
并非所有的动物都是猫

Cat c = new Animal();//not ok
是学习和理解这一点的好例子

为什么要将子类对象指定给超类引用

  • 多态性

  • 在进行测试时模拟对象

  • 如果您希望在将来用另一个实现替换它,则具有灵活性

  • 最有可能用于继承类和抽象类


Cat j=新动物()不可编译。您不能这样做。你的意思是
Animal j=new Cat()
?大盒子不能装在小盒子里。比运行时多态性有更多的好处…@luigimendoza完全同意他只是想给他一个基本的想法