/*
多态的好处:
为了提高代码的扩展性和可维护性。
*/
class Animal
{
public void show()
{
System.out.println("show");
}
public void eat()
{
System. out.println("eat");
}
}
class Cat extends Animal
{
public void show()
{
System.out.println("show cat");
}
public void eat()
{
System. out.println("eat 老鼠");
}
}
class Dog extends Animal
{
public void show()
{
System.out.println("show dog");
}
public void eat()
{
System. out.println("eat 骨头");
}
}
class Pig extends Animal
{
public void show()
{
System.out.println("show pig");
}
public void eat()
{
System. out.println("eat 饲料");
}
}
class AnimalTool
{
private AnimalTool(){}
/*
public static void printDog(Dog d)
{
d.show();
d.eat();
}
public static void printCat(Cat c)
{
c.show();
c.eat();
}
public static void printPig(Pig p)
{
p.show();
p.eat();
}
*/
public static void printAnimal(Animal a)
{
a.show();
a.eat();
}
}
class DuoTaiDemo5
{
public static void main(String[] args)
{
//一开始,养了一只狗
Dog d = new Dog();
d.show();
d.eat();
//接着又养了一只狗
Dog d2 = new Dog();
d2.show();
d2.eat();
//继续养狗
Dog d3 = new Dog();
d3.show();
d3.eat();
System.out.println("-----------------------");
//...养了很多只狗,我们就会发现一个问题,养的越多,代码的重复度越高。不好。
//如何改进呢?思考,他们调用的功能,仅仅是由于对象不一样。所以,我们能不能把
//每一个调用的整体封装一下呢,然后传递一个变化的对象即可呢?
//改进版代码
Dog d4 = new Dog();
Dog d5 = new Dog();
Dog d6 = new Dog();
/*
printDog(d4);
printDog(d5);
printDog(d6);
*/
//使用工具类
/*
AnimalTool.printDog(d4);
AnimalTool.printDog(d5);
AnimalTool.printDog(d6);
*/
AnimalTool.printAnimal(d4);
AnimalTool.printAnimal(d5);
AnimalTool.printAnimal(d6);
System.out.println("-----------------------");
//接着,改爱好了,喜欢猫了,那就开始养猫
//基本养猫动作和基本养狗动作一样。
//直接写改进版
Cat c = new Cat();
Cat c2 = new Cat();
Cat c3 = new Cat();
/*
printCat(c);
printCat(c2);
printCat(c3);
*/
//使用工具类
/*
AnimalTool.printCat(c);
AnimalTool.printCat(c2);
AnimalTool.printCat(c3);
*/
AnimalTool.printAnimal(c);
AnimalTool.printAnimal(c2);
AnimalTool.printAnimal(c3);
System.out.println("-----------------------");
//后来,发展了,我喜欢宠物猪。
//怎么办?
//我要创建猪对象,并使用
Pig p = new Pig();
Pig p2 = new Pig();
Pig p3 = new Pig();
/*
printPig(p);
printPig(p2);
printPig(p3);
*/
//使用工具类
/*
AnimalTool.printPig(p);
AnimalTool.printPig(p2);
AnimalTool.printPig(p3);
*/
AnimalTool.printAnimal(p);
AnimalTool.printAnimal(p2);
AnimalTool.printAnimal(p3);
System.out.println("-----------------------");
//到目前为止,有不好的地方。
//比如说:测试类中应该只能有main方法。是不能有其他方法的。
//为了保证不报错,我就得写一下方法。
//重新定义一个工具类,实现输出效果。
//宠物猪过时了,开始改养宠物狼。请问,要实现一样的效果,怎么办?
}
/*
public static void printDog(Dog d)
{
d.show();
d.eat();
}
public static void printCat(Cat c)
{
c.show();
c.eat();
}
public static void printPig(Pig p)
{
p.show();
p.eat();
}
*/
}
希望你能看的懂,有的注释掉了意思就是那样可以是可以但是麻烦于是换其他方法,也就是多态来解决,不当面不好讲.希望你看的懂 |