前言
java学习已经学习很长时间了,以前java基础的面向对象的三大特征部分没有重点看,今天补回来,这里主要写多态。
多态的概念
- 面向对象的三大特征
封装、继承、多态
- 多态性的前提
extends或implement,是多态性的前提。
- 概念
一个对象即有某种形态,又有另一种形态,这就是对象的多态性。
注意:多态指的是是对象而不是类。
4.图解
多态的格式和使用
代码中体现多态性。其实只有一句话,父类引用指向子类对象。
分类名称 对象名 = new 子类名称();
//或者
接口名称 对象名 = new 实现类();
输出结果:
注意:
new 的是子类对象,所以调用子类对象,
子类中没有的方法,父类中有,调用的是父类中的方法。
多态中变量成员的使用特点
访问成员变量的两种方式:
- 直接通过对象名称访问变量,看等号左边是谁,优先用谁,没有则往上找。
- 间接通过成员方法访问变量,看方法属于谁,就优先用谁,没有则往上找。
//父类中定义的num=10,子类中num=20
public static void main(String[] args) {
Fu obj = new Zi();
System.out.println(obj.num);
}
输出结果为:10
如果在子类中定义一个age成员变量,在测试中找不到该成员变量。
多态中成员方法的访问规则
看new的是谁,就优先用谁,没有则往上找。
重点:
成员方法中:编译向左,运行向右。
成员变量中:编译向左,运行向右。
解释:
使用多态的好处
无论右边new的时候换成哪个子类对象,等号左边不会改变,更加灵活。
对象的向上转型(自动转型)
格式:父类名称 对象名 = new 子类名称();
含义:右侧创建一个子类对象,把它当做父类对象来使用。
注意:向上转型一定是安全的,因为把小范围的转化为了大范围。
Animal animal = new Cat();
把猫转化为了动物,小范围变成了大范围。
缺点:
如果向上转型,那么无法调用子类特有的方法。
**解决方法:**向下转型
对象的向下转型
向下转型:其实就是一个还原过程。
格式:子类名称 对象名 = (子类名称)父类对象
含义:将父类对象,还原成原本的子类对象。
注意:
必须保证对象原来创建的是猫,向下转型的时候也是猫。
如何判断对象是否是类的实例呢,使用instanceof
instanceof关键字
使用方法
格式:对象 instanceof 关键字
返回值:boolean(判断对象是否是后面类的实例)
已有的事,后必在有。已行的事,后必再行。