多态相关的两个小练习

1.

编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。

可以弹奏的乐器包括二胡、钢琴和琵琶。

实现思路及关键代码:

1)定义乐器类Instrument,包括方法makeSound()

2)定义乐器类的子类:二胡Erhu、钢琴Piano和小提琴Violin

3)定义乐手类Musician,可以弹奏各种乐器play(Instrument i)

4)定义测试类,给乐手不同的乐器让他弹奏

public class Instrument {
    
     public void makeSound(){
         
        }
}
public class Erhu extends Instrument{
    
    @Override
    public void makeSound() {
        System.out.println("二胡声音");
    }
}
public class Piano extends Instrument{
    
    @Override
    public void makeSound() {
        System.out.println("钢琴声音");
    }
}
public class Violin extends Instrument{
    
    public void makeSound() {
        System.out.println("小提琴声音");
    }
}
public class Musician {
    
    public void play(Instrument i) {
        i.makeSound();
    }
}
public class Test {
    public static void main(String [] args) {
        
        Musician musician=new Musician();
        
        musician.play(new Erhu());
        musician.play(new Piano());
        musician.play(new Violin());
    }
}

2.

编写程序模拟“主人”喂养“宠物”的场景:

提示1:

主人类:Master

宠物类:Pet

eat()

宠物类子类:Dog、Cat、YingWu

重写宠物类的eat方法

提示2:

主人应该有喂养的方法:feed(Pet p)自行设计参数

feed中应该有一个参数----宠p.eat物对象

通过这个参数执行喂具体的哪只宠物

喂---调用宠物的eat方法

宠物应该有吃的方法:eat()

只要主人喂宠物,宠物就吃。

要求:主人类中只提供一个喂养方法feed(Pet p),要求达到可以喂养各种类型的宠物。

p.eat();

编写测试程序:

创建主人对象

创建各种宠物对象

调用主人的喂养方法feed(),喂养不同的宠物,观察执行结果。

public class Pet {
    
    public void eat() {

    }
}
public class Cat extends Pet{
    
    @Override
    public void eat() {
        System.out.println("小猫来吃猫粮~");
    }

}
public class Dog extends Pet{
    
    @Override
    public void eat() {
        System.out.println("小鹦鹉来吃鸟粮~");
    }

}
public class YingWu extends Pet{
    
    @Override
    public void eat() {
        System.out.println("小狗来吃狗粮~");
    }
}
public class Master {
    
    public void feed(Pet Chongwu) {
        Chongwu.eat();
    }

}
public class Test {
    public static void main(String [] args) {
        Master master=new Master();
        Dog dog=new Dog();
        Cat cat=new Cat();
        YingWu yingwu=new YingWu();
        
        master.feed(dog);
        master.feed(cat);
        master.feed(yingwu);
                
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值