【Java基础】2.多态
2.1概述
多态英文单词为 Polymorphism
一般简称Multi
面向对象三大特征:封装性、继承性、多态性
extends继承或者implements实现,是多态性的前提
代码中若要体现多态性,简而言之就是:
父类引用子类对象,即子类对象被当做父类看待
格式:
父类名称 对象名 = new 子类名称();
或者
接口名称 对象名 = new 实现类名称()
2.2访问成员变量
1.直接通过对象名称访问成员变量:
看等号左边是谁,优先用谁,没有则向上找。
2.间接通过成员方法访问成员变量:
看该方法属于谁(对象),优先用谁,没有则向上找。
2.3使用成员方法
在多态的代码中,成员方法的访问规则是:
看new的是谁,就优先用谁,没有则向上找。
口诀:编译看左边,运行看右边
对比:
成员变量:编译看左边,运行还看左边;
成员方法:编译看左边,运行看右边;
2.4多态的用途
2.5对象向上转型
对象的向上转型:其实就是多态写法
格式:父类名称 对象名 = new 子类名称();
含义:右侧创建子类对象,把它当做父类看待和使用。
注意事项:
1.向上转型一定是安全的。从小范围转向了大范围。
2.弊端:一旦向上转型,就无法调用子类本来的特有内容。
2.6对象向下转型
对象的向下转型:其实是向上转型的逆操作
格式:子类对象 对象名 = (子类名称) 父类对象; 类似于“强制类型转换”
含义:将父类对象,【还原】成本来的子类对象
注意事项:
1.必须保证对象本来创建时,就是猫,才能向下转型成为猫。
2.如果对象创建的时候,本来不是猫,强行向下转型成为猫,就会报错。ClassCastException
2.7 instanceof关键字
如何知道一个父类引用的对象,本来是什么子类?
格式: 对象 instanceof 类名称
这将会得到一个boolean值结果,也就是判断前面的对象能不能当做后面类型的实例
2.8接口多态的综合案例
2.8.1笔记本电脑
笔记本电脑(laptop)通常具备使用USB设备的功能。在生产时,笔记本都预留了可以插入USB设备的USB接口,但具体是什么USB设备,笔记本厂商并不关心,只要符合USB规格的设备都可以。
定义USB接口,具备最基本的开起功能和关闭功能。鼠标和键盘要想再电脑上使用,那么鼠标和键盘也必须遵守USB规范,实现USB接口,否则鼠标和键盘生产出来也没法使用。
2.8.2案例分析
进行描述笔记本类,实现笔记本使用USB鼠标、USB键盘
- USB接口:包含设备功能、关闭设备功能
- 笔记本类:包含开机功能、关机功能、使用USB设备功能
- 鼠标类:要实现USB接口,并具备点击的方法
- 键盘类:要实现USB接口,具备敲击的方法
2.8.3案例实现
代码实现:
``
package cn.itcast.day07.demo04;
public class DemoMain {
public static void main(String[] args) {
//准备一个笔记本电脑
Computer computer = new Computer();
//开机
computer.powerOn();
//准备一个鼠标,并拿起其USB
USB usbMouse = new Mouse();
//将鼠标连接上电脑
computer.useDevice(usbMouse);
//使用鼠标
((Mouse) usbMouse).click();//向下转换
((Mouse) usbMouse).move();//向下转换
//准备一个键盘,并拿起其USB
USB usbKeyboard = new Keyboard();
//将键盘连接上电脑
computer.useDevice(usbKeyboard);
//使用键盘
((Keyboard) usbKeyboard).point();//向下转换
//拔出鼠标和键盘
computer.closeDevice(usbMouse);
computer.closeDevice(usbKeyboard);
//关机
computer.powerOff();
//
}
}
出鼠标和键盘
computer.closeDevice(usbMouse);
computer.closeDevice(usbKeyboard);
//关机
computer.powerOff();
//
}
}