1 多态概述
Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类的父类(接口)变量赋值。
最终多态体现为:父类引用变量可以指向子类对象。
在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法
2 多态定义格式
父类类型或接口类型 变量 = new 子类对象
3 多态中成员变量特点
- 编译的时候,参考父类中有没有这个变量,如果有,编译成功,没有编译失败。
- 运行的时候,运行的是父类的变量值;
- 编译运行全部看父类;
4 多态中成员函数的特点
- 编译的时候,参考父类中有没有这个方法,如果有,编译成功,没有则失败;
- 运行的时候,运行的是子类的重写方法;
- 编译看父类,运行看子类;
5 比较运算符 instanceof
- 可以比较引用数据类型;
- 比较一个引用类型变量是不是这个类型变量;
- 格式:
引用变量 instanceof 类名
6 多态中的转型
- (向上转型)自动类型提升,将取值范围小的,自动提升为取值范围大的;范围小的,看成是子类;范围大的,看成是父类;
7 多态总结
- 多态使用前提:(1)有继承或者实现关系;(2)要方法重写;(3)父类引用指向子类对象;
- 多态的好处:提高了程序的扩展性;
- 多态的弊端:不能访问子类特有的功能;
8 多态的分类
- 类的多态
abstract class Fu{
public abstract void method();
}
class Zi extends Fu{
public void method(){
System.out.println("重写父类抽象方法");
}
}
Fu fu = new Zi();
- 接口的多态
interface Fu{
public abstract void method();
}
class Zi implements Fu{
public void method(){
System.out.println("重写接口抽象方法");
}
}
Fu fu = new Zi();
9 多态调用中,编译看谁,运行看谁
- 编译都看 = 左边的父类,父类有编译成功,没有编译失败;
- 运行时,静态方法,运行父类中的静态方法;
- 运行时,非静态方法,运行子类的重写方法;
- 成员变量,编译运行全是父类;