- 概述:同一个对象在不同时刻体现出来的不同状态。
- 多态的前提:
A:有继承或者实现关系。
B:有方法重写。
C:有父类或者父接口引用指向子类对象。
3. 多态的分类:
a:具体类多态
class Fu {}
class Zi extends Fu {}
Fu f = new Zi();
b:抽象类多态
abstract class Fu {}
class Zi extends Fu {}
Fu f = new Zi();
c:接口多态
interface Fu {}
class Zi implements Fu {}
Fu f = new Zi();
4.多态中的成员访问特点:
A:成员变量
编译看左边,运行看左边
B:构造方法
子类的构造都会默认访问父类构造
C:成员方法
编译看左边,运行看右边
D:静态方法
编译看左边,运行看左边
(巧记上述)
上述编译运行 结果的原因 ?
因为成员方法有重写。
5.多态的好处:
A:提高代码的维护性(继承体现)
B:提高代码的扩展性(多态体现)
6. 多态的弊端:
父不能使用子的特有功能。
现象:
子可以当作父使用,父不能当作子使用。
7.多态中的转型
A:向上转型
从子到父(Fu f = new Zi();)
B:向下转型
从父到子(Zi z = (Zi)f; //要求该f必须是能够转换为Zi的)
8.举个例子吧
class Fu {
public int age = 40;
public void speak() {
System.out.println("i am Fu");
}
}
class Son extendsFu {
public int age = 20;
public void speak() {
System.out.println("i am Son");
}
public void playGame() {
System.out.println("play chess");
}
}
//若向上转型
Fu f = new Son();
System.out.println(f.age); //40
f.speak(); //i am Son
//向下转型
Son k = (Son) f;
System.out.println(k.age); //20
k.speak(); //i am Son
k.playGame(); //play chess