多态用一句话概括就是:事物在运行过程中存在不同的状态。。多态的存在有三个前提:
1.要有继承关系
2.子类要重写父类的方法
3.父类引用指向子类对
综合实际应用,我们做出以下总结:
①
成员变量
编译看左边(父类),运行看左边(父类)
②
成员方法
编译看左边(父类),运行看右边(子类)。动态绑定
③
静态方法
编译看左边(父类),运行看左边(父类)。
多态的弊端:多态后不能使用子类特有的属性和方法
接口比较简单就不一一赘述
看看他们的综合案例实现吧!
1、首先定义一个USB接口:
接口中封装了打开设备和关闭设备的抽象方法
相关代码:
public interface USB {
//打开设备
public abstract void open();
//关闭设备
public abstract void close();
}
2、定义键盘和鼠标类并实现USB接口:
相关代码:
在鼠标类中:重写了USB接口中的打开关闭方法,同时还有自己的特有的点击方法:click()
在键盘类中:同样重写了USB接口中的打开关闭方法,以及他自己的特有方法打字:type()
public class Mouse implements USB {
@Override
public void open() {
System.out.println("打开鼠标设备");
}
@Override
public void close() {
System.out.println("关闭鼠标设备");
}
//点击方法
public void click(){
System.out.println("点击鼠标按钮");
}
}
public class KeyBoard implements USB {
@Override
public void open() {
System.out.println("打开键盘设备");
}
@Override
public void close() {
System.out.println("关闭键盘设备");
}
//敲击键盘
public void type(){
System.out.println("敲击键盘打字");
}
}
3、笔记本类
在笔记本类中:定义了电脑的开关机方法,注意这是与USB中的打开关闭方法是不同的!同时在笔记本类中还定义了使用设备的方法useDevice(USB usb)传入的是USB的一个实例,在使用设备时,要使用instanceof方法判断该对象是哪个设备的实例从而正确调用设备的特有方法!
public class Laptop {
//电脑开机方法
public void powOn(){
System.out.println("电脑正在开机");
}
//电脑关机方法
public void powOff(){
System.out.println("电脑正在关机");
}
//使用USB
public void useDevice(USB usb){
usb.open();
if (usb instanceof Mouse){
((Mouse) usb).click();
}else if(usb instanceof KeyBoard){
((KeyBoard) usb).type();
}
usb.close();
}
}
4、主类:
public class Main {
public static void main(String[] args) {
//创建笔记本对象
Laptop laptop = new Laptop();
//开机
laptop.powOn();
//创建鼠标对象
Mouse mouse = new Mouse();
//使用鼠标
laptop.useDevice(mouse);
//创建键盘对象
KeyBoard keyBoard = new KeyBoard();
//使用键盘
laptop.useDevice(keyBoard);
//关机
laptop.powOff();
}
}