面向对象(多态)-->3
初识多态:
创建Animal类(父类):
运行结果:
即:同类型的对象,在执行同一行为时,表现出不同的行为特征
多态的优势:
多态不能访问子类独有的功能:
多态中的类型转换问题:
1、自动类型转换:子类对象赋值给父类类型的变量指向:
2、强制类型转换:子类 对象变量 = (子类)父类类型变量;
3、异常 ClassCastException:转型后的类型和对象的真是类型不是同一类型,会出现ClassCastException异常错误信息。
建议类型转换之前使用instanceof判断对象的真实类型
多态综合案例:
需求:
- 使用面向对象编程模拟:设计一个电脑对象,可以安装2个USB设备;
- 鼠标:安装时可以完成接入、调用点击功能、拔出功能;
- 键盘:安装时可以完成接入、调用打字功能、拔出功能;
1 //接口定义规范:必须实现接入、拔出功能
2 public interface USB {
3 void connnect();
4 void unconnect();
5 }
1 //鼠标类
2 public class Mouse implements USB{
3 private String brand;
4
5 public Mouse(String brand) {
6 this.brand = brand;
7 }
8
9 public Mouse() {
10 }
11
12 public String getBrand() {
13 return brand;
14 }
15
16 public void setBrand(String brand) {
17 this.brand = brand;
18 }
19 //子类独有的功能
20 public void click(){
21 System.out.println(brand + "鼠标点击功能");
22 }
23
24 @Override
25 public void connnect() {
26 System.out.println(brand + "鼠标成功插入电脑");
27 }
28
29 @Override
30 public void unconnect() {
31 System.out.println(brand + "鼠标成功拔出电脑");
32 }
33 }
1 //键盘类
2 public class Keyboard implements USB{
3 private String brand;
4
5 public String getBrand() {
6 return brand;
7 }
8
9 public void setBrand(String brand) {
10 this.brand = brand;
11 }
12
13 public Keyboard(String brand) {
14 this.brand = brand;
15 }
16
17 public Keyboard() {
18 }
19
20 //子类独有功能
21 public void print(){
22 System.out.println("键盘打字功能");
23 }
24
25 @Override
26 public void connnect() {
27 System.out.println(brand + "键盘成功插入电脑");
28 }
29
30 @Override
31 public void unconnect() {
32 System.out.println(brand + "键盘成功拔出电脑");
33 }
34 }
1 public class Test {
2 public static void main(String[] args) {
3 //创建鼠标对象调用相关功能
4 Mouse mouse = new Mouse("华为");
5 mouse.click();
6 mouse.connnect();
7 mouse.unconnect();
8 System.out.println("--------------");
9 //创建键盘对象调用相关功能
10 Keyboard keyboard = new Keyboard("小米");
11 keyboard.print();
12 keyboard.connnect();
13 keyboard.unconnect();
14 }
15 }
运行结果: