多态

作者: 极课编程 | 来源:发表于2025-09-17 16:59 被阅读0次
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();
            }
        }
    }
}

相关文章

  • 1.9 多态基本概念

    本小节知识点: 【了解】什么是多态? 【掌握】多态的条件 【了解】多态的优点 1.什么是多态? 什么是多态:多态就...

  • C++ 的多态(Polymorphism), virtual f

    多态 c++支持两种多态,编译时多态和运行时多态但其实编译时多态根本不是真正的多态,编译时多态就是函数的重载,ov...

  • 详解Java多态

    详解Java多态 多态定义 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态...

  • 多态

    1.多态 1.多态 1.1 要点 多态是方法的多态,不是属性的多态 多态的存在有三个必要条件:继承;方法重写;父类...

  • java多态面试题

    java多态性 多态分两种: (1) 编译时多态(设计时多态):方法重载。 (2) 运行时多态:JAVA运...

  • Java_basic_10: 多态polymorphism

    多态polymorphism 多态是指对象的多种形态 主要可以分为引用多态和方法多态 继承是多态的实现基础 引用多...

  • 六、多态与虚函数

    多态的基本概念 多态 多态分为编译时多态和运行时多态。 编译时多态主要是指函数的重载(包括运算符的重载)。对重载函...

  • Java基础之面向对象

    1.多态,继承,封装 Java实现多态有哪些必要条件?具体怎么实现?多态的实现原理?多态的作用? 答:多态的优点 ...

  • java多态面试题

    java多态性 多态分两种: (1) 编译时多态(设计时多态):方法重载。 (2) 运行时多态:JAVA运行时...

  • 多态与虚函数

    多态的基本概念 实现了多态机制的程序,可以使用同一个名字完成不同的功能。 多态分为编译时多态和运行时多态。 多态 ...

网友评论

      本文标题:多态

      本文链接:https://www.haomeiwen.com/subject/tmblnctx.html