1.多态性的理解:
可以理解为一个事物的多种形态。
2.何为多态性:
对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)
可以直接应用在抽象类和接口上
举例:Person p = new Man(); Object obj = new Date();
3.多态性的使用:虚拟方法调用
有了对象的多态性以后,我们在编译期(在IDEA敲代码时自动编译),只能调用父类中声明的方法(如果调用的方法父类没有,在idea写代码的时候就会报错),但在运行期,我们实际执行的是子类重写父类的方法。
子类中定义了与父类同名同参数的方法,在多态情况下,将此时父类的方法**称为虚拟方法,**父类根据赋给它的不同子类对象,动态调用属于子类的该方法。这样的方法调用在编译期是无法确定的
总结:
-
“看左边”:看的是父类的引用(父类中不具备子类特有的方法)
-
“看右边”:看的是子类的对象(实际运行的是子类重写父类的方法)
-
Java引用变量有两个类型:编译时类型和运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。简称:编译时,看左边;运行时,看右边。
-
在Java中,子类的对象可以替代父类的对象使用
- 一个变量只能有一种确定的数据类型。
- 一个引用类型变量可能**指向(引用)**多种不同类型的对象。
- Java向上转型与向下转型
4.多态性的使用前提:
① 类的继承关系 ② 方法的重写
5.多态性的应用举例:
class Driver{
public void doData(Connection conn){
//conn = new MySQlConnection(); 或 conn = new OracleConnection();
//规范的步骤去操作数据 MYSQL、Oracle都实现了这三个方法。Connection接口有规范的步骤,直接调用的是 MYSQL(子类)实现的这几个方法。
conn.method1();
conn.method2();
conn.method3();
}
}
6.多态性使用的注意点:
对象的多态性,只适用于方法,不适用于属性(编译和运行都看等号左边),多态性和属性没关系。
面试题:
8.1 谈谈你对多态性的理解?
① 实现代码的通用性。
② Object类中定义的public boolean equals(Object obj){ }
JDBC:使用java程序操作(获取数据库连接、CRUD)数据库(MySQL、Oracle、DB2、SQL Server)
③ 抽象类、接口的使用肯定体现了多态性。(抽象类、接口不能实例化)
8.2 多态是编译时行为还是运行时行为? 运行时