日期:2014-05-18  浏览次数:20692 次

关于面向对象的一个疑问?
Cat c = new Cat();
Animal a = new Cat();
这两者的区别,为什么推荐采用后者!





------解决方案--------------------
第二个 Cat 肯定是继承自 Animal ,声明父类,有子类创建,这是多态
------解决方案--------------------
低耦合,业务单元不需要知道具体类是cat还是dog还是mouse。
比如业务类有Kill方法,如果需要知道具体类的话需要写
Kill(Cat cat);
Kill(Dog dog);
Kill(Mouse mouse);

而使用基类则只要写
Kill(Animal animal);
------解决方案--------------------
探讨

第二个 Cat 肯定是继承自 Animal ,声明父类,有子类创建,这是多态

------解决方案--------------------
探讨

感谢大家回答,但这样会不会出现一种问题:子类对象的行为受到父类的限制!即子类的方法或属性父类没有!

------解决方案--------------------
多态是实现共性下的特性.
比如 animal 猫, 狗 都会叫
但 猫叫"喵", 狗叫"汪"
animal a = new cat();
animal b = new dog();

void shout(animal c)
{
c.shout();
}
此时,c传的a就是猫叫,为b就是狗叫;

如果某属性或方法是子类cat dog特有的,而不是共性的,使用的时候,你就必须明确是cat还是dog



------解决方案--------------------
Cat c = new Cat(); //这应该是派生类
Animal a = new Cat(); //用基类的对象new一个派生类出来