下面的代码定义了一个Person类,在该类中给出同名不同参的feed方法。但是,假如参数为类类型,并且数量非常的大,那么这样的代码就显得臃肿,多态应运而生。
class Person{
void feed(Cat c){
c.eat();
}
void feed(Dog d){
d.eat();
}
//.....
}
class Cat{
public void eat(){
System.out.println("miao miao miao~");
}
}
class Dog {
public void eat(){
System.out.println("wang wang wang~");
}
}
class DuoTaiDemo2{
public static void main(String[] args){
Person p = new Person();
p.feed(new Cat());
p.feed(new Dog());
}
}
使用多态后的代码:
class Person{
/* void feed(Cat c){ c.eat(); } void feed(Dog d){ d.eat(); } */
void feed(Animal a){//Animal a = new Cat();
a.eat();
if(a instanceof Cat)
{//还可以访问子类特有属性
Cat c=(Cat)a;
c.catchMouse();//向下转型,调用小猫抓老鼠
}
}
}
abstract class Animal{
//抽取出一般类的父类
abstract void eat();
}
class Cat extends Animal{
public void eat(){
System.out.println("miao miao miao~");
}
public void catchMouse()
{//小猫独有的抓老鼠属性~~
System.out.println("miao miao miao~");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("wang wang wang~");
}
}
class DuoTaiDemo2{
public static void main(String[] args){
/* Person p = new Person(); p.feed(new Cat()); p.feed(new Dog()); } */
Person p = new Person();
p.feed(new Cat());
p.feed(new Dog());
}
}