2014-04-23 62 views
0

动物是超为什么要将一个子类对象分配给一个超类参考?

猫是动物的子类

猫是猫科动物的一个子类

犬是动物的sublcass

犬是犬

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

“(class)is e ating“

我已经尝试过创建动物数组,并通过它们循环,并调用eat()方法,该方法为每个给定的动物输出适当的输出。

我的问题是,这样做什么呢一个增益:

Cat j = new Animal(); 

不会Cat j = new Cat()做任何事情,你需要关于与动物类型的方法做的,因为它已经通过继承的动物是什么?

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

对不起!

+3

'Cat j = new Animal();'不可编译。 – Braj

+1

你不能那样做。你的意思是'动物j =新猫()'? –

+0

一个较大的盒子不能装在较小的盒子里面。 – Braj

回答

0

通过这样做我们实现了运行时多态性。

基于重写的方法将被调用对象的类型

现在来的玩具你的问题

只有一行的答案,这将是

猫始终是一个动物

Animal a = new Cat();//ok 

所有的动物都不是猫

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

here是学习和理解这个

+0

有比运行时多态性更多的好处... –

+0

@LuiggiMendoza完全同意只是给他一个基本的想法 –

0

为什么一个子类对象赋给一个超类引用一个很好的例子?

  • 多态性

  • 一边做测试

  • 的灵活性,如果你想在未来

  • 另一种实现方式来取代它Mock对象
  • 在继承和抽象类最有可能使用

相关问题