一个小案例,让你读懂Java的多态机制

本篇文章我们主要了解Java的多态机制,首先简单介绍一下什么是多态:

所谓多态嘛,就是同一个行为具有多个不同表现形式或形态的能力,简单明了。当然对于新手小白来说可能有点抽象,通俗点来说就是一个动作行为会执行不同的操作,即一个方法会执行不同的语句块。站在Java程序的角度来说就是一个接口定义某些对象共有的方法,然后由这些对象来重写这些方法实现不同的操作,他们都属于这个接口类型。

以下通过一个电脑和USB设备之间关系的案例来介绍:

Usb设备主要有鼠标、键盘,他们都有插入电脑,拔出电脑,以及在电脑执行操作等动作,那么我们可以定义一个接口Usb,接口中主要包含,插入(init)、拔出(destory)、执行(run)方法。

定义鼠标和键盘类,让他们实现Usb接口,并重写接口中的方法,从而实现自己特定的操作。

而电脑调用这些设备时,就可以统一使用Usb对象来调用,而实际上设备还是实例化各自的对象。

Usb接口:

package com.csdn.Impl;


//定义Usb接口指定usb设备共同具有的动作
public interface Usb {

    //模拟usb设备插入电脑
    void init();

    //模拟usb设备执行操作
    void run();

    //模拟usb设备拔出
    void destory();
}

鼠标类:

package com.csdn.Impl;


/**
 * 鼠标属于Usb设备,实现usb接口并指定鼠标在usb设备中的特定操作(实现接口、重写方法)
 */
public class Mouse implements Usb{

    //鼠标对象的名称,默认为鼠标
    private String name="鼠标:";


    //实例化时表示鼠标已经插入电脑
    public Mouse(String name){
        this.name+=name;
        this.init();
    }

    @Override
    /**
     * 插入电脑时执行的操作(重写init方法)
     */
    public void init() {
        System.out.println(name+"已插入");
    }

    @Override
    /**
     * 鼠标被电脑使用时执行的操作(重写run方法)
     */
    public void run() {
        System.out.println(name+"执行操作");
    }

    @Override
    /**
     * 鼠标拔出时执行的操作(重写destory方法)
     */
    public void destory() {
        System.out.println(name+"已从电脑拔出");
    }

}

键盘类:

package com.csdn.Impl;

/**
 * 键盘属于Usb设备,实现usb接口并指定键盘在usb设备中的特定操作(实现接口、重写方法)
 */
public class KeyBoard implements Usb {
    //键盘对象的名称,默认为键盘
    private String name="键盘:";

    //实例化时表示键盘已经插入电脑
    public KeyBoard( String name){
        this.name+=name;
        this.init();

    }
    
    @Override
    /**
     * 插入电脑时执行的操作(重写init方法)
     */
    public void init() {
        System.out.println(name+"已插入");
    }

    @Override
    /**
     * 键盘被电脑使用时执行的操作(重写run方法)
     */
    public void run() {
        System.out.println(name+"执行操作");
    }


    @Override
    /**
     * 鼠标拔出时执行的操作(重写destory方法)
     */
    public void destory() {
        System.out.println(name+"已从电脑拔出");
    }
}

电脑类:

package com.csdn.Impl;

public class Computer {

    //电脑对象的名称
    private String name;

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

    /**
     * 模拟使用usb设备
     * @param usb 传入一个usb对象,即为被电脑使用的设备
     */
    public void usbRun(Usb usb){
        System.out.println("电脑:"+name+"使用了usb设备");
        usb.run();
    }

    /**
     * 模拟拔出usb设备
     * @param usb,传入一个usb对象,即为被电脑拔出的设备
     */
    public void removeUsb(Usb usb){
        System.out.println("电脑:"+name+"拔出了usb设备");
        usb.destory();
    }
}

测试类:

package com.csdn.test;

import com.csdn.Impl.Computer;
import com.csdn.Impl.KeyBoard;
import com.csdn.Impl.Mouse;
import com.csdn.Impl.Usb;

public class Test {
    public static void main(String[] args) {
        Computer com = new Computer("小电");//创建一个电脑
        Usb mouse = new Mouse("小鼠");      //创建一个鼠标的usb设备
        Usb keyboard = new KeyBoard("小键");//创建一个键盘的usb设备
        com.usbRun(mouse);                       //模拟使用鼠标
        com.removeUsb(mouse);                    //模拟拔掉鼠标
        com.usbRun(keyboard);                    //模拟使用键盘
        com.removeUsb(keyboard);                 //模拟拔掉键盘
    }
}

运行结果如下:

 以上电脑类中:usbRun方法参数指定的是个Usb对象,而实际传入的是一个Mouse对象或KeyBoard对象,这便是多态的体现。

同时在测试类中,实例化对象时,使用了Usb usb = new Mouse()的方法,因为Mouse类实现了Usb接口,这便是向上转型(实际上还是Mouse或KeyBoard对象),这也是多态的体现。

希望这篇文章让你对Java多态更好理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值