一、多态
1.什么是多态?
多态是指同一个对象,在不同时刻表现出来的不同形态
eg: 我们可以说猫是猫:(猫 c = new Cat;),也可以说猫是动物(动物 a = new Cat;),这里猫在不同时刻表现出了不同的形态(猫或者动物),这就是多态
2.多态的前提:
- 要有(继承\实现)关系
- 要有方法重写
- 要有父类引用,指向子类对象
-
(注:这里的父类为Animal,子类为Cat,代码:Animal a = new Cat();的意思就是父类引用,指向子类对象)
-
代码举例:
3.多态中成员访问特点
- 构造方法:同继承一样,子类会通过super访问父类的构造方法
- 成员变量:编译看左边(父类),执行看左边(父类)
- 成员方法:编译看左边(父类),执行看右边(子类)
代码示例:
为什么成员变量和成员方法的访问不一样呢?
- 因为成员方法有重写,而成员变量没有
4.多态的优点与弊端
- 优点:
- 提高了程序的扩展性:定义方法的时候,使用父类型作为形参,该方法就可以接收这父类的任意子类对象
- 弊端:
- 不能使用子类特有的方法
二、多态中的转型
1.多态中转型存在的风险:
如果被转的引用类型变量,对应的实际类型和目标类型不是同一种类型,那么在转换时就会出现错误:ClassCastException
2.转型的作用:
转型后可以使用子类特有的方法,解决ClassCastException报错
- 向上转型:从子到父,父类引用指向子类对象
- 向下转型:从父到子,父类引用转向子类对象
代码示例:
2.instanceof关键字
使用格式:变量名 instanceof 类型
通俗理解:判断instanceof左边的变量,是否是右边的类型,返回boolean类型结果
eg:animal instanceof Dog