多态练习题自用

练习题 1:动物声音模拟

在一个动物世界的模拟程序里,需要模拟不同动物发出声音的行为。为了实现这个功能,要运用面向对象编程的多态特性。

  1. 创建Animal
    1. 这是所有动物的基类。
    2. 包含一个makeSound方法,此方法用于模拟动物发出声音的行为。在基类中,这个方法给出一个通用的声音描述,即 “动物发出声音”。
  2. 创建Dog类和Cat
    1. Dog类和Cat类都继承自Animal类。
    2. Dog类需要重写makeSound方法,让它输出 “汪汪汪”,模拟狗叫的声音。
    3. Cat类同样要重写makeSound方法,输出 “喵喵喵”,模拟猫叫的声音。
  3. 在主函数中进行测试
    1. 创建DogCat的对象。
    2. 把这些对象赋值给Animal类型的变量。
    3. 调用这些变量的makeSound方法,观察输出结果,体会多态的效果,也就是根据对象的实际类型调用相应的重写方法。

 Animal类

public class Animal {
    private String name;
    private String sound;


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

    public String getName(){
        return name;
    }

    public void setSound(){
        this.sound = sound;
    }

    public  String getSound(){
        return sound;
    }

    public void makeSound(){
        System.out.println("动物发出声音");
    }
}

 Cat类

public class Cat extends Animal{
    public void makeSound(){
        System.out.println("喵喵喵");
    }
}

Dog类

public class Dog extends Animal{
    public void makeSound(){
        System.out.println("汪汪汪");
    }
}

测试

public class test {
        public static void main(String[] args) {
            // 创建 Dog 和 Cat 的对象,并赋值给 Animal 类型的变量
            Animal dog = new Dog();
            Animal cat = new Cat();

            // 调用 makeSound 方法,观察多态效果
            dog.makeSound();
            cat.makeSound();
        }
}

练习题2:员工工资计算

在一个公司的工资管理系统中,不同职位的员工工资计算方式不同。为了统一管理员工工资计算,使用多态来实现这个功能。

  1. 创建Employee
    1. 这是所有员工的基类。
    2. 包含两个私有属性name(姓名)和basicSalary(基本工资),通过构造函数进行初始化。
    3. 包含一个calculateSalary方法,用于计算员工的工资。在基类中,这个方法直接返回基本工资。
  2. 创建Manager类和Engineer
    1. Manager类和Engineer类都继承自Employee类。
    2. Manager类有一个额外的私有属性bonus(奖金),通过构造函数进行初始化。它需要重写calculateSalary方法,计算经理的工资,即基本工资加上奖金。
    3. Engineer类有一个额外的私有属性overtimePay(加班费),通过构造函数进行初始化。它需要重写calculateSalary方法,计算工程师的工资,即基本工资加上加班费。
  3. 在主函数中进行测试
    1. 创建ManagerEngineer的对象,并分别传入合适的参数进行初始化。
    2. 把这些对象赋值给Employee类型的变量。
    3. 调用这些变量的calculateSalary方法,输出计算得到的工资,理解多态如何根据员工的实际职位类型调用不同的工资计算方法。

Employee类

public abstract class Employee {
    private String name;
    private double basicSalary;


    public String getName() {
        return name;
    }

    public Employee(String name,double basicSalary){
        this.name = name;
        this.basicSalary = basicSalary;
    }

    public double getBasicSalary(){
        return basicSalary;
    }

    public double calculateSalary(){
        return basicSalary;
    }

    public abstract void show();
}

 Engineer类

public class Engineer extends Employee{

    private double overtimePay;

    public Engineer(String name, double basicSalary, double overtimePay) {
        super(name, basicSalary);
        this.overtimePay = overtimePay;
    }

    public double calculateSalary(){
        return overtimePay+super.getBasicSalary();
    }

    @Override
    public void show() {
        System.out.println("工程师的姓名是:"+super.getName()+",本月工资是:"+calculateSalary());
    }

}

Manager类

public class Manager extends Employee{
    private double bonus;

    public Manager(String name, double basicSalary,double bonus) {
        super(name, basicSalary);
        this.bonus = bonus;
    }

    public double calculateSalary(){
        return bonus+super.getBasicSalary();
    }

    @Override
    public void show() {
        System.out.println("经理的姓名是:"+super.getName()+",本月工资是:"+calculateSalary());
    }
}

测试

public class test {
    public static void main(String[] args) {

        Employee manager = new Manager("张三",5000,2000);
        Employee engineer = new Engineer("李四",4000,1000);

        manager.calculateSalary();
        engineer.calculateSalary();

        manager.show();
        engineer.show();
    }
}

输出结果预览:

练习题3:动物表演秀系统

在一个动物表演秀的场景中,有多种不同类型的动物参与表演。每种动物都有自己独特的表演方式和声音。表演主持人需要统一组织动物进行表演并记录它们发出的声音。我们将使用 Java 多态特性,把父类对象作为参数传递给相关方法,来实现这个动物表演秀系统。

  1. 创建Animal
    1. 作为所有动物的父类。
    2. 包含name(动物名称)属性,通过构造函数初始化。
    3. 提供getName方法用于获取动物名称。
    4. 包含抽象方法perform,用于描述动物的表演行为。
    5. 包含抽象方法makeSound,用于模拟动物发出声音的行为。
  2. 创建Dog
    1. 继承自Animal类。
    2. 重写perform方法,输出 “狗狗 [name] 正在欢快地表演接球!”。
    3. 重写makeSound方法,输出 “狗狗 [name] 发出:汪汪汪”。
  3. 创建Cat
    1. 继承自Animal类。
    2. 重写perform方法,输出 “猫咪 [name] 优雅地表演走平衡木!”。
    3. 重写makeSound方法,输出 “猫咪 [name] 发出:喵喵喵”。
  4. 创建Parrot
    1. 继承自Animal类。
    2. 重写perform方法,输出 “鹦鹉 [name] 精彩地模仿人类说话!”。
    3. 重写makeSound方法,输出 “鹦鹉 [name] 发出:你好呀!”。
  5. 创建ShowHost
    1. 包含一个organizePerformance方法,该方法接受一个Animal类型的参数,调用该动物的perform方法和makeSound方法,模拟主持人组织动物进行表演并记录声音。
    2. 包含一个hostShow方法,该方法接受一个Animal类型的数组,遍历数组,调用organizePerformance方法为每只动物组织表演,模拟主持人主持一场完整的动物表演秀。
  6. 在主函数中进行测试
    1. 创建DogCatParrot的对象。
    2. 创建ShowHost对象。
    3. 调用ShowHost类的hostShow方法,传入包含所有动物对象的数组,观察整个动物表演秀的过程。

Animal类

public abstract class Animal {
    private String name;

    public Animal(String name){
        this.name = name;
    }

    public Animal() {

    }

    public String getName(){
        return name;
    }

    public abstract void perform();
    public abstract void makeSound();
}

 Cat类

public class Cat extends Animal{

    public Cat(String name) {
        super(name);
    }

    @Override
    public void perform() {
        System.out.println("猫猫"+super.getName()+"优雅的表演走平衡木");
    }

    @Override
    public void makeSound() {
        System.out.println("猫猫"+super.getName()+"发出:“喵喵喵”");
    }
}

Dog类

public class Dog extends Animal{

    public Dog() {
    }

    public Dog(String name) {
        super(name);
    }

    @Override
    public void perform() {
        System.out.println("狗狗"+super.getName()+"正在欢快地表演接球!");
    }

    @Override
    public void makeSound() {
        System.out.println("狗狗"+super.getName()+"发出“汪汪汪!”");
    }

}

Parrot类

public class Parrot extends Animal{

    public Parrot() {
    }

    public Parrot(String name) {
        super(name);
    }

    @Override
    public void perform() {
        System.out.println("鹦鹉"+super.getName()+"精彩地模仿人类说话!");
    }

    @Override
    public void makeSound() {
        System.out.println("鹦鹉"+super.getName()+"发出:“你好呀”");
    }
}

ShowHost类

public class ShowHost {

    public void organizePerformance(Animal animal){
        if (animal instanceof Dog){
            Dog dog = (Dog) animal;
            dog.perform();
            dog.makeSound();
        }else if (animal instanceof Cat){
            Cat cat = (Cat) animal;
            cat.perform();
            cat.makeSound();
        }else if (animal instanceof Parrot){
            Parrot parrot = (Parrot) animal;
            parrot.perform();
            parrot.makeSound();
        }
    }

    public void hostShow(Animal[] animals){
        for (int i=0; i < animals.length; i++) {
            organizePerformance(animals[i]);
        }
    }
}

测试

public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog("-旺财-");
        Cat cat = new Cat("-灰灰-");
        Parrot parrot = new Parrot("-八哥-");

        // 创建主持人对象
        ShowHost host = new ShowHost();

        // 动物数组
        Animal[] animals = {dog,dog,parrot,cat,parrot};

        // 主持表演秀
        host.hostShow(animals);
    }
}

输出预览结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值