多态综合案例

案例:

//无实际意义

设计一个电脑对象,可以安装两个USB设备;

鼠标:被安装时可以完成接入、调用点击、拨出功能;

键盘:被安装时可以完成接入、调用打字、拔出功能。

分析实现:

1.定义一个USB的接口:(申明USB设备的规范必须是:可以接入、拔出);

2.定义2个USB实现类代表鼠标,键盘,让其实现USB接口,并分别定义它们自己独有的功能;

3.创建电脑对象,创建2个USB实现类对象,分别安装到电脑中并触发功能的执行。

public interface USB {
    void access();          //接入
    void pullOut();         //拔出
}
//定义usb实现类键盘,让其实现usb接口
public class KeyBoard implements USB{
    //定义键盘名字
    private String KeyBoardName;

     //提供有参无参构造器,提供变量getter,setter方法暴露取值和赋值
    public KeyBoard() {
    }

    public KeyBoard(String keyBoardName) {
        KeyBoardName = keyBoardName;
    }

    public String getKeyBoardName() {
        return KeyBoardName;
    }

    public void setKeyBoardName(String keyBoardName) {
        KeyBoardName = keyBoardName;
    }

    @Override
    public void access() {
        System.out.println(KeyBoardName+"已经成功连接上电脑");
    }

    @Override
    public void pullOut() {
        System.out.println(KeyBoardName+"安全拔出了电脑");
    }
//    键盘的独有功能:扣字
    public void tap(){
        System.out.println(KeyBoardName+"敲击了一段优美的中国话");
    }
}
//定义usb实现类鼠标,让其实现usb接口
public class Mouse implements USB{
    //定义鼠标名字
    private String MouseName;

    //提供有参无参构造器,提供变量getter,setter方法暴露取值和赋值
    public Mouse() {
    }

    public Mouse(String mouseName) {
        MouseName = mouseName;
    }

    public String getMouseName() {
        return MouseName;
    }

    public void setMouseName(String mouseName) {
        MouseName = mouseName;
    }

    @Override
    public void access() {
        System.out.println(MouseName+"成功连接上电脑");

    }

    @Override
    public void pullOut() {
        System.out.println(MouseName+"安全拔出电脑");
    }
//    鼠标的独有功能:点击
    public void click(){
        System.out.println(MouseName+"双击了屏幕");
    }
}
//创建电脑对象
public class Computer{
    //定义电脑名字
    private String ComputerName;
    //提供有参无参构造器,提供getter,setter方法,暴露其取值和赋值
    public Computer() {
    }

    public Computer(String computer) {
        ComputerName = computer;
    }

    public String getComputer() {
        return ComputerName;
    }

    public void setComputer(String computer) {
        ComputerName = computer;
    }
//方法:模拟电脑开机
    public void start() {
        System.out.println(ComputerName+"开机了");
    }
//提供安装的usb时的入口
public void installUSB(USB usb){
//        usb设备连接电脑
        usb.access();
//        if判读usb接入的是键盘还是鼠标
        if (usb instanceof KeyBoard){
//            是键盘就将usb强制转换成键盘
            KeyBoard k = (KeyBoard) usb;
            k.tap();
//            是鼠标就强制转换成鼠标
        }else if (usb instanceof Mouse){
            Mouse m = (Mouse)usb;
            m.click();
        }
//        安全拔出电脑
        usb.pullOut();
}
}
public class Test {
    public static void main(String[] args) {
//        创建电脑对象
        Computer pc1 = new Computer("个人pc");
//        开机
        pc1.start();
//        创建键盘,鼠标对象
        USB u1 = new KeyBoard("小键");
        USB u2 = new Mouse("小标");
//        链接电脑
        pc1.installUSB(u1);
        pc1.installUSB(u2);
    }
}

控制台输出结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java多态是一种重要的面向对象编程特性,它允许一个对象以多种不同的方式工作。下面介绍一个经典的Java多态案例——“动物园”。 假设有一个“动物园”类,里面有一个“动物”类,还有“狗”和“猫”两个子类,代码如下: ```java class Zoo { public void play(Animal animal) { animal.shout(); } } class Animal { public void shout() { System.out.println("动物叫!"); } } class Dog extends Animal { public void shout() { System.out.println("汪汪汪!"); } } class Cat extends Animal { public void shout() { System.out.println("喵喵喵!"); } } ``` 在“动物园”类中有一个play方法,它接收一个“动物”类对象作为参数,然后调用这个对象的shout方法。在“狗”和“猫”两个子类中分别重写了shout方法,实现了不同的叫声。 这时候我们可以创建一个“动物园”对象,然后分别将“狗”和“猫”对象传递给play方法进行测试。代码如下: ```java public class Main { public static void main(String[] args) { Zoo zoo = new Zoo(); Animal dog = new Dog(); Animal cat = new Cat(); zoo.play(dog); zoo.play(cat); } } ``` 运行结果如下: ``` 汪汪汪! 喵喵喵! ``` 通过这个案例,我们可以看到,在“动物园”类中,play方法接收一个“动物”类对象作为参数,而在实际测试中我们传递的是“狗”和“猫”对象,这就是多态的应用。我们可以看到,即使传递的是不同的对象,调用的都是各自重写的shout方法,实现了不同的叫声。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值