多态

package com.example1;

public class Dog extends Pet{

}

public class Master {
    public void cure(Dog dog) {
        if(dog.getHealth()<50) {
            dog.setHealth(60);
            System.out.println("吃药,打针");
        }
    }
    
    public void cure(Penguin penguin) {
        if(penguin.getHealth()<50) {
            penguin.setHealth(70);
            System.out.println("医疗,吃药");
        }
    }
}

public class Penguin extends Pet{

}

public class Pet {
    public String name = "";
    public int health = 100;
    public int love = 0;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
    }

    public int getLove() {
        return love;
    }

    public void setLove(int love) {
        this.love = love;
    }
}
  
public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setHealth(20);
        Penguin p = new Penguin();
        p.setHealth(30);
        Master m = new Master();
        m.cure(dog);
        m.cure(p);
    }
}

public class Dog extends Pet{

    @Override
    public void toHospital() {
        this.setHealth(60);
        System.out.println("打针,吃药");
        
    }

}

ublic class Master {
    public void cure(Pet pet) {
        if(pet.getHealth()<50) {
            pet.toHospital();
        }
    }
}

public class Penguin extends Pet{

    public void toHospital() {
        this.setHealth(70);
        System.out.println("吃药,医疗");
        
    }

}


public abstract class Pet {
    public String name = "";
    public int health = 100;
    public int love = 0;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
    }

    public int getLove() {
        return love;
    }

    public void setLove(int love) {
        this.love = love;
    }
    
    public abstract void toHospital();
}

public class Test {
    public static void main(String[] args) {
//      Dog dog = new Dog();
//      dog.setHealth(20);
//      Master m = new Master();
//      m.cure(dog);
//      
//      Penguin p = new Penguin();
//      p.setHealth(30);
//      m.cure(p);
        Pet pet = new Dog();
        pet.setHealth(20);
        Master m = new Master();
        m.cure(pet);
        
        pet = new Penguin();
        pet.setHealth(30);
        m.cure(pet);
    }
}
public class Dog extends Pet{

    @Override
    public void eat() {
        super.health = super.health+3;
        System.out.println("狗狗吃饱了,体重增加3");
    }
    
    public void catchingFlyDisc() {
        super.health = super.health-10;
        super.love = super.love+5;
        System.out.println("飞盘");
    }

}

public class Master {
    public void feed(Pet pet) {
        pet.eat();
    }

    public void play(Pet pet) {
        if (pet instanceof Dog) {
            Dog dog = (Dog) pet;
            dog.catchingFlyDisc();
        } else if (pet instanceof Penguin) {
            Penguin penguin = (Penguin) pet;
            penguin.swimming();
        }
    }
}

public class Penguin extends Pet{

    @Override
    public void eat() {
        super.health = super.health+5;
        System.out.println("吃饱了,体重增加5");
        
    }
    
    public void swimming() {
        super.health = super.health-10;
        super.love = super.love+5;
        System.out.println("游泳");
    }
}

public abstract class Pet {
    public String name = "";
    public int health = 100;
    public int love = 0;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
    }

    public int getLove() {
        return love;
    }

    public void setLove(int love) {
        this.love = love;
    }
    
    public abstract void eat();
}

public class Test {
    public static void main(String[] args) {
        Dog d = new Dog();
        Penguin p = new Penguin();
        Master m = new Master();
        m.play(d);
        m.play(p);  
    }
}
image.png
image.png
image.png
image.png

接口

/**
 * 动物抽象类。
 * @author 
 */
public abstract class Animal {
    private String name = null;// 名字
    private int legNum = 0; //腿的条数
    /**
     * 有参构造方法。
     * @param name  名字
     * @param legNum 腿的条数
     */
    public Animal(String name, int legNum) {
        this.name = name;
        this.legNum = legNum;
    }
    /**
     * 获得动物名字。
     * @return 名字
     */
    public String getName() {
        return name;
    }
    /**
     * 获得动物腿的条数。
     * @return 腿的条数
     */
    public int getLegNum() {
        return legNum;
    }   
    /**
     * 动物叫。
     */
    public abstract void shout();

}

/**
 * 猫类,动物类的子类。
 * @author
 */
public class Cat extends Animal {
    /**
     * 构造方法。
     * @param name  名字
     * @param legNum   腿的条数
     */
    public Cat(String name, int legNum) {
        super(name, legNum);
    }
    /**
     * 重写父类的shout()方法。
     */
    public void shout() {
        System.out.println("喵喵喵……");
    }
}

/**
 * 鸭类,动物类的子类。
 * @author 
 */
public class Duck extends Animal {
    /**
     * 构造方法。
     * @param name   名字
     * @param legNum   腿的条数
     */
    public Duck(String name, int legNum) {
        super(name, legNum);
    }
    /**
     * 重写父类的shout()方法。
     */
    public void shout() {
        System.out.println("嘎嘎嘎……");
    }
}

/**
 * 动物抽象类。
 * @author
 */
public abstract class Animal {
    private String name = null;// 名字

    /**
     * 有参构造方法。
     * @param name  名字
     */
    public Animal(String name) {
        this.name = name;
    }
    /**
     * 获得动物名字。
     * @return 名字
     */
    public String getName() {
        return name;
    }
    /**
     * 动物叫。
     */
    public abstract void shout();
}

/**
 * 猫类,动物类的子类,实现陆生接口。
 * @author
 */
public class Cat extends Animal implements Terrestrial {
    private int legNum = 0; // 腿的条数
    /**
     * 构造方法。
     * @param name 名字
     * @param legNum 腿的条数
     */
    public Cat(String  name,int legNum) {
        super(name);
        this.legNum = legNum;
    }
    /**
     * 重写父类的shout()方法。
     */
    public void shout() {
        System.out.println("喵喵喵……");
    }
    /**
     * 实现接口的getLegNum()方法。
     * @return 腿的条数
     */
    public int getLegNum() {
        return legNum;      
    }
}


/**
 * 海豚类,动物类的子类。
 * @author
 */
public class Dolphin extends Animal {
    /**
     * 构造方法。
     * @param name 名字
     */
    public Dolphin(String name) {
        super(name);        
    }
    /**
     * 重写父类的shout()方法。
     */
    public void shout() {
        System.out.println("海豚音……");

    }   
}

/**
 * 鸭类,动物类的子类,实现陆生接口。
 * @author 
 */
public class Duck extends Animal implements Terrestrial {
    private int legNum = 0; // 腿的条数
    /**
     * 构造方法。
     * @param name 名字
     * @param legNum 腿的条数
     */
    public Duck(String name,int legNum) {
        super(name);
        this.legNum = legNum;
    }
    /**
     * 重写父类的shout()方法。
     */
    public void shout() {
        System.out.println("嘎嘎嘎……");
    }
    /**
     * 实现接口的getLegNum()方法。
     * @return 腿的条数
     */
    public int getLegNum() {
        return legNum;
    }
}


/**
 * 接口。
 * @author 
 */
public interface Terrestrial {
    
    /**
     * 返回腿的条数。
     * @return 腿的条数
     */
    public int getLegNum();

}


/**
 * 测试类,创建各种动物对象,让动物发出叫声。
 * @author 
 */
public class Test {
    public static void main(String[] args) {
        Animal[] animals = new Animal[3];
        animals[0] = new Cat("加菲猫", 4);
        animals[1] = new Duck("唐小鸭", 4);
        animals[2] = new Dolphin("海豚奇奇");
        System.out.println("动物名字\t\t动物叫");
        for (int i = 0; i < animals.length; i++) {          
            System.out.print(animals[i].getName() + "\t\t");
            animals[i].shout();
        }
    }
}


/**
 * 测试类,创建各种动物对象,输出动物的腿的条数。
 * @author 
 */
public class Test {
    public static void main(String[] args) {
        Animal animals[] = new Animal[3];
        animals[0] = new Cat("加菲猫", 4);
        animals[1] = new Duck("唐小鸭", 2);
        animals[2] = new Dolphin("海豚奇奇");
        System.out.println("动物名字\t\t腿的条数\t\t动物叫");
        for (int i = 0; i < animals.length; i++){
            if (animals[i] instanceof Terrestrial) {
                String name = animals[i].getName();
                int legNum = ((Terrestrial)animals[i]).getLegNum();
                System.out.print(name + "\t\t" + legNum + "\t\t");
                animals[i].shout();
            } else {
                String name = animals[i].getName();
                System.out.print(name + "\t\t" + 0 + "\t\t");
                animals[i].shout();
            }
        }
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容