【问题标题】:Why assign a subclass object to a superclass reference? [duplicate]为什么要将子类对象分配给超类引用? [复制]
【发布时间】:2014-04-23 19:59:27
【问题描述】:

动物是超类

猫科动物是动物的子类

猫是猫的子类

犬是动物的子类

Dog 是 Canine 的子类

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

“(班级)正在吃饭”

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

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

Cat j = new Animal();

Cat j = new Cat() 不会对 Animal 类型的方法做任何你需要做的事情,因为它已经是一个通过继承的动物?

编辑:对不起,我的意思是相反的——通过声明: 动物 j = new Cat();

对不起!

【问题讨论】:

  • Cat j = new Animal(); 不可编译。
  • 你不能那样做。你的意思是Animal j = new Cat()
  • 大箱子不能装在小箱子里。

标签: java inheritance polymorphism


【解决方案1】:

为什么要将子类对象分配给超类引用?

  • 多态性

  • 在进行测试时模拟对象

  • 灵活性,如果您想在将来用另一个实现替换它

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

【讨论】:

    【解决方案2】:

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

    根据对象的类型,将调用被覆盖的方法

    现在来回答你的问题

    只需一行答案即可

    猫永远是动物

    Animal a = new Cat();//ok
    

    所有动物都不是猫

    Cat c = new Animal();//not ok
    

    here 是学习和理解这一点的好例子

    【讨论】:

    • 有比运行时多态性更多的好处...
    • @LuiggiMendoza 完全同意只是想给他一个基本的想法
    猜你喜欢
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多