笔记本电脑

笔记本电脑(laptop)通常具备使用USB设备的功能。在生产时,笔记本都预留了可以插入USB设备的USB接口,但具体是什么USB设备,笔记本厂商并不关心,只要符合USB规格的设备都可以。
定义USB接口,具备最基本的开启功能和关闭功能。鼠标和键盘要想能在电脑上使用,那么鼠标和键盘也必须遵守USB规范,实现USB接口,否则鼠标和键盘的生产出来也无法使用。

1. 案例分析

进行描述笔记本类,实现笔记本使用USB鼠标、USB键盘

  • USB接口,包含开启功能、关闭功能
  • 笔记本类,包含运行功能、关机功能、使用USB设备功能
  • 鼠标类,要实现USB接口,并具备点击的方法
  • 键盘类,要实现USB接口,具备敲击的方法

2. 案例实现

  1. 定义USB接口

    package cn.itcast.day10.demo07;public interface USB {public abstract void open(); // 打开设备public abstract void close(); // 关闭设备}
  2. 定义鼠标类

    package cn.itcast.day10.demo07;// 鼠标就是一个USB设备
    public class Mouse implements USB {@Overridepublic void open() {System.out.println("打开鼠标");}@Overridepublic void close() {System.out.println("关闭鼠标");}public void click() {System.out.println("鼠标点击");}
    }
  3. 定义键盘类

    package cn.itcast.day10.demo07;// 键盘就是一个USB设备
    public class Keyboard implements USB {@Overridepublic void open() {System.out.println("打开键盘");}@Overridepublic void close() {System.out.println("关闭键盘");}public void type() {System.out.println("键盘输入");}
    }
  4. 定义笔记本类

    package cn.itcast.day10.demo07;public class Computer {public void powerOn() {System.out.println("笔记本电脑开机");}public void powerOff() {System.out.println("笔记本电脑关机");}// 使用USB设备的方法,使用接口作为方法的参数public void useDevice(USB usb) {usb.open(); // 打开设备if (usb instanceof Mouse) { // 一定要先判断Mouse mouse = (Mouse) usb; // 向下转型mouse.click();} else if (usb instanceof Keyboard) { // 先判断Keyboard keyboard = (Keyboard) usb; // 向下转型keyboard.type();}usb.close(); // 关闭设备}}
  5. 测试类

    package cn.itcast.day10.demo07;public class DemoMain {public static void main(String[] args) {// 首先创建一个笔记本电脑Computer computer = new Computer();computer.powerOn();// 准备一个鼠标,供电脑使用
    //        Mouse mouse = new Mouse();// 首先进行向上转型USB usbMouse = new Mouse(); // 多态写法// 参数是USB类型,我正好传递进去的就是USB鼠标computer.useDevice(usbMouse);// 创建一个USB键盘Keyboard keyboard = new Keyboard(); // 没有使用多态写法// 方法参数是USB类型,传递进去的是实现类对象computer.useDevice(keyboard); // 正确写法!也发生了向上转型// 使用子类对象,匿名对象,也可以
    //        computer.useDevice(new Keyboard()); // 也是正确写法computer.powerOff();System.out.println("==================");method(10.0); // 正确写法,double --> doublemethod(20); // 正确写法,int --> doubleint a = 30;method(a); // 正确写法,int --> double}public static void method(double num) {System.out.println(num);}}

Java基础:接口多态的综合案例 —— 笔记本电脑相关推荐

  1. 接口多态的综合案例——笔记本电脑

    文章目录 1.1 笔记本电脑 1.2 案例分析 1.3 案例实现 1.1 笔记本电脑 笔记本电脑(laptop)通常具备使用USB设备的功能.在生产时,笔记本都预留了可以插入USB设备的USB接口, ...

  2. 第九课 Java基础篇——面向对象(综合案例)

    1.文字版格斗游戏 格斗游戏,每个游戏角色的姓名,血量,都不相同,在选定人物的时候(〈new对象的时候),这些信息就应该被确定下来. Role.Java package cn.nwafu;import ...

  3. Java基础之多态深入解析

    Java基础之多态深入解析 多态的基本概念 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性.简单的说:就是用基类的引用指向子类的对象. 多态的优点 消除类型之间的耦合关系 ...

  4. Java基础十一--多态

    Java基础十一--多态 一.多态定义 简单说:就是一个对象对应着不同类型. 多态在代码中的体现: 父类或者接口的引用指向其子类的对象. 1 /* 2 3 对象的多态性. 4 5 class 动物 6 ...

  5. java基础之多态的详细解释_JAVA基础之多态

    下面我为大家讲解一下JAVA基础之多态,希望大家喜欢. 多态就是事物存在的多种形态,比如你在大街上看见一只藏獒,你可以说这只藏獒真凶猛,也可以说这只狗真凶猛,还可以说这个动物真凶猛,以上三种说法其实都 ...

  6. Java基础——接口

    一.接口语法 接口的创建 interface //接口不能直接创建对象 public interface grammar {//定义的属性都是公有静态属性(默认也是)String name = &qu ...

  7. 【Java】抽象类继承的综合案例

    文章目录 2.1 综合案例:群主发普通红包 1. 抽象类 1.1 概述 由来 父类中的方法,被它的子类们重写,子类各自的实现都不尽相同.那么父类的方法声明和方法主 体,只有声明还有 意义,而方法主体则 ...

  8. Java基础知识编写一个HelloWorld案例

    常用dos命令 1.1.1    打开控制台 –      win + R,然后cmd回车 1.1.2    常用命令 –      d: 回车      盘符切换 –      dir(direct ...

  9. 【Java基础】多态

    首先先来个总结: 什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消 ...

  10. Java基础---接口是啥?

    接口 接口:是一个特殊的抽象类,规定了接口的使用者和接口的实现者之间的规范 定义:interface 接口名 {} 特点:接口中定义的属性都是公开静态常量(即使不加修饰符,也默认是public sta ...

最新文章

  1. JBoss 系列十六:JBoss7/WildFly配置domain模式
  2. 利用kickstart实现pxe自动安装linux
  3. 诗歌rails之 有条件的validation
  4. Type TIMESTAMP(6) of table field ‘ts‘ does not match with the physical type TIMESTAMP(3) of the ‘ts‘
  5. webresource_Jersey WebResource –标头不附加
  6. 【指南】远程抄表系统(AMR/AMI)中无线模块选型
  7. 细述 Java垃圾回收机制→How Java Garbage Collection Works?
  8. python函数可变参数_python中函数的可变参数
  9. PAT乙级(1030 完美数列)
  10. 货币化物联网:实现收益
  11. 连接 RIP 与 OSPF 网络
  12. 转:libatk-bridge.so错误解决
  13. Centos7下编译安装Nginx、Mysql、PHP(文章底部包含一键安装脚本)
  14. word文档怎么在左侧显示目录?
  15. html如何让文字变斜体,CSS中如何让文字变成斜体
  16. 哪个PDF软件好用?这几款你们知道吗?
  17. 20届春秋招数据分析面筋分享
  18. hadoop最新官网如何下载之前版本(2.7.1)
  19. Cypress系列(50)- wrap() 命令详解
  20. [苹果技巧]如何快速删除 Finder 工具栏上的图标?

热门文章

  1. 2.TCP/IP 详解卷1 --- 链路层
  2. 17.UNIX 环境高级编程--高级进程间的通信
  3. 15. 固若金汤:网站的安全架构
  4. href=“javascript:void(0);”和href=void(change_code(this));
  5. php中有关目录的几个函数 basename() dirname() pathinfo()
  6. AndroidStudio debug
  7. web开发实战--弹出式富文本编辑器的实现思路和踩过的坑
  8. HDOJ(HDU) 1860 统计字符
  9. xp共享文件win7访问时不能保存密码
  10. 基于C#的MongoDB数据库开发应用(2)--MongoDB数据库的C#开发