package com.shujia.day09;
import java.nio.channels.Pipe;
/*
多态的好处
1、提高了程序的维护性(由继承保证)
2、提高了程序的扩展性(由多态保证)
*/
class Animal{
String name;
int age;
public Animal() {
}
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public void eat(){
System.out.println("吃");
}
public void sleep(){
System.out.println("睡");
}
}
class Dog extends Animal{
@Override
public void eat() {
System.out.println("🐕吃🥩");
}
@Override
public void sleep() {
System.out.println("🐕侧着睡");
}
}
class Pig extends Animal{
@Override
public void eat() {
System.out.println("🐖吃杂食");
}
@Override
public void sleep() {
System.out.println("🐖趴着睡");
}
}
class Snake extends Animal{
@Override
public void eat() {
System.out.println("🐍吃🐀");
}
@Override
public void sleep() {
System.out.println("🐍盘着睡");
}
}
class Tiger extends Animal{
@Override
public void eat() {
System.out.println("🐅吃🥩");
}
@Override
public void sleep() {
System.out.println("🐅趴着睡");
}
}
//写一个工具类,对每一个动物调用吃和睡的功能
class AnimalTool{
private AnimalTool(){}
// public static void useDog(Dog dog){
// dog.eat();
// dog.sleep();
// }
//
// public static void usePig(Pig pig){
// pig.eat();
// pig.sleep();
// }
//
// public static void useSnake(Snake snake){
// snake.eat();
// snake.sleep();
// }
public static void useAnimal(Animal animal){ //Animal animal = new Tiger();
animal.eat();
animal.sleep();
}
}
public class DuoTaiDemo5 {
public static void main(String[] args) {
//我想一只🐕
Dog d1 = new Dog();
// d1.eat();
// d1.sleep();
//使用工具类的方式调用动物的吃和睡的功能
// AnimalTool.useDog(d1);
AnimalTool.useAnimal(d1);
//我想一只🐖
Pig p2 = new Pig();
// p2.eat();
// p2.sleep();
// AnimalTool.usePig(p2);
AnimalTool.useAnimal(p2);
//我想养🐍
//按照上面的写法,应该先写一个🐍的类,然后在类中重写eat和sleep方法
//在工具类中添加一个调用🐍的吃和睡的方法
Snake s1 = new Snake();
// AnimalTool.useSnake(s1);
AnimalTool.useAnimal(s1);
//随着我们要养动物的种类越来越多,每一种动物都需要经过上面两个步骤
//创建该动物的类我们能理解,这是必须要有的
//但是第二步在工具类进行添加修改其实是有问题。
//今后的开发中,工具类是不允许频繁修改的。
//但是我们不添加方法的话,就没法使用工具类调用具体动物的功能
//于是,我们就在想,怎么可以只在工具类中写一个方法,可以调用所有动物的功能呢?
//可以使用多态来实现。
//我现在养一只🐅
Tiger t1 = new Tiger();
AnimalTool.useAnimal(t1); // new Tiger()
}
}