关于面向对象的一个疑问?
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);
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------多态是实现共性下的特性.
比如 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一个派生类出来