多态是Java面向对象开发的三大特性(封装、继承、多态)之一:封装和继承是类的特性,而多态是对象的特性,我们也可以从字面上简单的理解多态就是对象的多种状态。
以下通过一个接口多个实现的例子进行分析:
代码:
/**
* USB接口中
*/
public interface Usb {
void openUsb();
}
/**
* 实现USB接口的鼠标类
*/
public class Mouse implements Usb{
@Override
public void openUsb() {
System.out.println("打开Usb鼠标");
}
public void click(){
System.out.println("鼠标单击");
}
}
/**
* 实现USB接口的键盘类
*/
public class Keyboard implements Usb {
@Override
public void openUsb() {
System.out.println("打开Usb键盘");
}
public void click(){
System.out.println("键盘单击");
}
}
/**
* 使用USB接口的电脑类
*/
public class Computer {
public void powerOn() { System.out.println("电脑打开电源"); }
public void powerOff(){
System.out.println("电脑关闭电源");
}
public void UseUsbDevice(Usb usb){
usb.openUsb();
if (usb instanceof Mouse){
((Mouse) usb).click();
}
if(usb instanceof Keyboard){
((Keyboard) usb).click();
}
}
}
//测试类
public class Test {
public static void main(String[] args) {
Computer computer = new Computer();
Usb usbMouse = new Mouse();
computer.UseUsbDevice(usbMouse);
Usb usbKeyboard = new Keyboard();
computer.UseUsbDevice(usbKeyboard);
}
}
总结
- Mouse和Keyboard类都实现了USB接口(接口是不能被实例化的,不同的接口实现类就是多态的表现)
- 在Test测试类中将USB接口引用指向了usbMouse和usbKeyboard对象,其实就是实现多态的描述
- 在Computer类的UseUsbDevice对传入的具体对象作instantceof对象类型判断,这就是运行时多态