多态好处:
1、提高了程序的可维护性,由继承来保证,不解释
2、提高了程序的扩展性,请大家先看如下代码,视频详解
[tianchai_youku]XNzM2Mzc4ODcy[/tianchai_youku]
class Animal {
//方法体为空。
public void eat() {}
public void sport() {}
}
class Cat extends Animal {
public void eat() {
System.out.println("猫吃鱼");
}
public void sport() {
System.out.println("猫捉老鼠");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("狗吃肉");
}
public void sport() {
System.out.println("狗游泳");
}
}
class Pig extends Animal {
public void eat() {
System.out.println("猪吃草");
}
public void sport() {
System.out.println("猪拱地");
}
}
class DuoTaiDemo4 {
//测试方法。main里面的内容是可以发生变化的。
public static void main(String[] args) {
/*
//需求:我喜欢猫,我要来只猫
Cat c = new Cat();
c.eat();
c.sport();
//需求:我喜欢猫,我要再来只猫
Cat c2 = new Cat();
c2.eat();
c2.sport();
//需求:我喜欢猫,我要再来只猫
Cat c3 = new Cat();
c3.eat();
c3.sport();
//我们发现:调用这多个方法的仅仅是对象不一样。
//而调用的方法是一样的。
//所以,我要改进,把变化的对象作为参数传递即可。
//改进后,我们的调用方式
System.out.println("------------------------");
catMethod(c);
catMethod(c2);
catMethod(c3);
System.out.println("------------------------");
//需求:我喜欢狗,我要来只狗
Dog d = new Dog();
Dog d2 = new Dog();
Dog d3 = new Dog();
dogMethod(d);
dogMethod(d2);
dogMethod(d3);
System.out.println("------------------------");
//需求:我喜欢猪,我要来只猪
//首先,定义猪类,然后造对象,再在main方法里面加入针对猪的操作
Pig p = new Pig();
Pig p2 = new Pig();
Pig p3 = new Pig();
pigMethod(p);
pigMethod(p2);
pigMethod(p3);
*/
//需求:我继续喜欢狼...
//由于,我们到底有哪些动物我们喜欢,我们自己都可能不知道了
//所以,我们就用动物替代其他的具体的类。
//这样的话,别人不管传递那种动物,我的方法是不需要改动的。
//改进后的测试
Cat c = new Cat();
animalMethod(c);
Dog d = new Dog();
animalMethod(d);
}
/*
public static void catMethod(Cat c) {
c.eat();
c.sport();
}
public static void dogMethod(Dog d) {
d.eat();
d.sport();
}
public static void pigMethod(Pig p) {
p.eat();
p.sport();
}
*/
public static void animalMethod(Animal a) { //Animal a = c; c = new Cat(); Animal a = new Cat();
a.eat();
a.sport();
}
}