练习题 1:动物声音模拟
在一个动物世界的模拟程序里,需要模拟不同动物发出声音的行为。为了实现这个功能,要运用面向对象编程的多态特性。
- 创建
Animal类:- 这是所有动物的基类。
- 包含一个
makeSound方法,此方法用于模拟动物发出声音的行为。在基类中,这个方法给出一个通用的声音描述,即 “动物发出声音”。
- 创建
Dog类和Cat类:Dog类和Cat类都继承自Animal类。Dog类需要重写makeSound方法,让它输出 “汪汪汪”,模拟狗叫的声音。Cat类同样要重写makeSound方法,输出 “喵喵喵”,模拟猫叫的声音。
- 在主函数中进行测试:
- 创建
Dog和Cat的对象。 - 把这些对象赋值给
Animal类型的变量。 - 调用这些变量的
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:员工工资计算
在一个公司的工资管理系统中,不同职位的员工工资计算方式不同。为了统一管理员工工资计算,使用多态来实现这个功能。
- 创建
Employee类:- 这是所有员工的基类。
- 包含两个私有属性
name(姓名)和basicSalary(基本工资),通过构造函数进行初始化。 - 包含一个
calculateSalary方法,用于计算员工的工资。在基类中,这个方法直接返回基本工资。
- 创建
Manager类和Engineer类:Manager类和Engineer类都继承自Employee类。Manager类有一个额外的私有属性bonus(奖金),通过构造函数进行初始化。它需要重写calculateSalary方法,计算经理的工资,即基本工资加上奖金。Engineer类有一个额外的私有属性overtimePay(加班费),通过构造函数进行初始化。它需要重写calculateSalary方法,计算工程师的工资,即基本工资加上加班费。
- 在主函数中进行测试:
- 创建
Manager和Engineer的对象,并分别传入合适的参数进行初始化。 - 把这些对象赋值给
Employee类型的变量。 - 调用这些变量的
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 多态特性,把父类对象作为参数传递给相关方法,来实现这个动物表演秀系统。
- 创建
Animal类:- 作为所有动物的父类。
- 包含
name(动物名称)属性,通过构造函数初始化。 - 提供
getName方法用于获取动物名称。 - 包含抽象方法
perform,用于描述动物的表演行为。 - 包含抽象方法
makeSound,用于模拟动物发出声音的行为。
- 创建
Dog类:- 继承自
Animal类。 - 重写
perform方法,输出 “狗狗 [name] 正在欢快地表演接球!”。 - 重写
makeSound方法,输出 “狗狗 [name] 发出:汪汪汪”。
- 继承自
- 创建
Cat类:- 继承自
Animal类。 - 重写
perform方法,输出 “猫咪 [name] 优雅地表演走平衡木!”。 - 重写
makeSound方法,输出 “猫咪 [name] 发出:喵喵喵”。
- 继承自
- 创建
Parrot类:- 继承自
Animal类。 - 重写
perform方法,输出 “鹦鹉 [name] 精彩地模仿人类说话!”。 - 重写
makeSound方法,输出 “鹦鹉 [name] 发出:你好呀!”。
- 继承自
- 创建
ShowHost类:- 包含一个
organizePerformance方法,该方法接受一个Animal类型的参数,调用该动物的perform方法和makeSound方法,模拟主持人组织动物进行表演并记录声音。 - 包含一个
hostShow方法,该方法接受一个Animal类型的数组,遍历数组,调用organizePerformance方法为每只动物组织表演,模拟主持人主持一场完整的动物表演秀。
- 包含一个
- 在主函数中进行测试:
- 创建
Dog、Cat和Parrot的对象。 - 创建
ShowHost对象。 - 调用
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);
}
}
输出预览结果:


5193

被折叠的 条评论
为什么被折叠?



