- 理解多态性:可以理解为一个事物的多种形态
-
何为多态性
对象的多态性:父类的引用指向子类的对象(以下代码Person是Man和Women的父类)
Person p1 = new Man();
Person p2 = new Women();
-
多态的使用,虚拟方法调用
有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法
总结:编译,看左边;运行,看右边 -
多态性的使用前提
①:类的继承关系
②:方法的重写
多态性使用举例:
package com.atguigu.java3;
public class Animal {
public void eat() {
System.out.println("动物:吃");
}
public void shout() {
System.out.println("动物:叫");
}
}
class Dog extends Animal{
public void eat() {
System.out.println("狗吃狗粮");
}
public void shout() {
System.out.println("汪汪汪");
}
}
class Cat extends Animal{
public void eat() {
System.out.println("猫吃猫粮");
}
public void shout() {
System.out.println("喵喵喵");
}
}
class AnimalTest{
public static void main(String[] args) {
AnimalTest test = new AnimalTest();
/*******举例1*************/
test.func(new Dog());
System.out.println("********");
test.func(new Cat());
}
public void func(Animal animal) {
animal.eat();
animal.shout();
}
}
/*******举例2*************/
class Order{
public void method(Object obj) {
}
}
/*******举例3*************/
class Driver{
public void doData(Connection conn) {//conn = new MySQLConnection(); 或者 conn = new OracleConnection();
//跟不同类型的数据库建立连接
//规范的步骤去操作数据
conn.method1();
conn.method2();
conn.method3();
}
}
- 对象的多态性,只适用于方法,不适用于属性
方法的重载和重写
对于重载而言,在方法调用之前,编译器就已经确定了所要调用的方法,这称为“早绑定”或“静态绑定”
对于多态,只有等到方法调用的那一刻,解释运行器才会确定所要调用的具体方法,这称为“晚绑定”或“动态绑定”
网友评论