多态的定义:
是指同一行为,具有多个不同表现形式。
多态的条件:
- 继承或者实现【二选一】
- 方法的重写【意义体现:不重写,无意义】
- 父类引用指向子类对象【格式体现】
多态的好处:
增加方法的扩展性和复用性。
使用多态特性,注意什么样的弊端:
不能调用子类特有方法,必须向下转型。
接口的定义:
接口,是Java语言中一种引用类型,是方法的集合。
使用interface关键定义接口,其中可以定义抽象方法,默认方法,私有方法,静态方法
引用类型转换:
向上转型:多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的,当父类引用指向一个子类对象时,便是向上转 型。
向下转型:父类类型向子类类型向下转换的过程,这个过程是强制的。一个已经向上转型的子类对象,将父类引用转为子类引 用,可以使用强制类型转换的格式,便是向下转型。
案例分析:
进行描述笔记本类,实现笔记本使用USB鼠标,USB键盘
- USB接口,包含开启功能、关闭功能
- 笔记本类,包含运行功能,关机功能、使用USB设备功能
- 鼠标类,要实现USB接口,并具备点击的方法
- 键盘类,要实现USB接口,具备敲击的方法
// 定义USB接口
interface USB{
void open(); // 开启功能
void close(); // 关闭功能
}
// 定义鼠标类:
class Mouse implements USB{
public void open(){
System.out.println("鼠标开启,红灯闪一闪");
}
public void close(){
System.out.println("鼠标关闭,红灯熄灭");
}
public void click(){
System.out.println("鼠标点击");
}
}
// 定义键盘类
class KeyBoard implements USB{
public void open(){
System.out.println("键盘开启");
}
public void close(){
System.out.println("键盘关闭");
}
pubilc void type(){
System.out.println("键盘打字");
}
}
// 定义笔记本类
class Laptop{
//笔记本开启运行功能
public void run(){
System.out.println("笔记本运行");
}
// 笔记本使用USB设备,这时当笔记本对象调用这个功能时,必须给其传递一个符合USB规则的USB设备
public void useUSB(USB usb){
//判断是否有USB设备
usb.open();
// 类型转换,调用特有方法
if(usb insteanceof Mouse){
Mouse m = (Mouse)usb;
m.click();
}else if(usb insteanceof KeyBoard){
KeyBoard kb = (KeyBoard) usb;
kb.type();
}
usb.close();
} public void shutDown(){ System.out.println("笔记本关闭");
}
}
// 测试类
public static void main(String[] args){
//创建笔记本实体对象
Laptop lt = new Laptop();
//笔记本开启
lt.run();
// 创建鼠标实体对象
Usb u = new Mouse();
//笔记本使用鼠标
lt.useUSB(u);
//创建键盘实体对象
KeyBoard kb = new KeyBoard();
// 笔记本使用键盘
lt.useUSB(kb);
//笔记本关闭
lt.shutDown();
}
}