#JAVA#面向对象(多态2)
package 多态;
/*
多态的好处:
A:提高了代码的维护性(继承保证)
B:提高了代码的扩展性
猫狗案例代码
*/
class Animal{
public void eat(){
System.out.println("eat");
}
public void sleep(){
System.out.println("sleep");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("狗吃骨头");
}
public void sleep(){
System.out.println("狗睡觉");
}
}
class cat extends Animal{
public void eat(){
System.out.println("猫吃鱼");
}
public void sleep(){
System.out.println("猫睡觉");
}
}
class Pig extends Animal{
public void eat(){
System.out.println("猪吃饭");
}
public void sleep(){
System.out.println("猪睡觉");
}
}
//针对动物操作的工具类
class AnimalTool{
private AnimalTool() {}
/*
//调用猫的功能
public static void usecat(cat c) {
c.eat();
c.sleep();
}
//调用狗的功能
public static void usedog(Dog d) {
d.eat();
d.sleep();
}
public static void usePig(Pig p) {
p.eat();
p.sleep();
}
*/
public static void useAnimal(Animal a) {
a.eat();
a.sleep();
}
}
class DuoTaiDemo {
public static void main(String args[]) {
//我喜欢猫,就养了一只
cat c=new cat();
c.eat();
c.sleep();
//我很喜欢猫,所以,又养了一只
cat c2=new cat();
c2.eat();
c2.sleep();
//我特别喜欢猫,又养了一只
cat c3=new cat();
c3.eat();
c3.sleep();
//......
System.out.println("------");
//我养了很多只猫,每次创建对象是可以接受的,但很相似,仅仅只是对象名不一样
//我们准备用方法改进
//调用方法改进版
//AnimalTool.usecat(c);
//AnimalTool.usecat(c2);
//AnimalTool.usecat(c3);
AnimalTool.useAnimal(c);
AnimalTool.useAnimal(c2);
AnimalTool.useAnimal(c3);
System.out.println("------");
//我喜欢狗
Dog d=new Dog();
Dog d2=new Dog();
Dog d3=new Dog();
//AnimalTool.usedog(d);
//AnimalTool.usedog(d2);
//AnimalTool.usedog(d3);
AnimalTool.useAnimal(d);
AnimalTool.useAnimal(d2);
AnimalTool.useAnimal(d3);
System.out.println("------");
//我喜欢宠物猪
//定义一个猪类,它要继承自动物,提供两个方法,并且还得在工具类中添加该类的方法调用
Pig p=new Pig();
Pig p2=new Pig();
Pig p3=new Pig();
//AnimalTool.usePig(p);
//AnimalTool.usePig(p2);
//AnimalTool.usePig(p3);
AnimalTool.useAnimal(p);
AnimalTool.useAnimal(p2);
AnimalTool.useAnimal(p3);
System.out.println("------");
//我喜欢宠物狼,老虎,豹子...
//定义相应的类,继承自动物,提供对应的方法重写,并在工具类添加方法调用
//前面几个必须写,但是工具类每次都改,能不能不改了
}
}