多態
同一事物在不同的條件之下,展現的意識形態不一樣
程序中的多態
1) 具有繼承關係
2) 子類必須重寫父類的方法
3) 子類對象賦給父類、父類的引用指向子類、(里氏替換原則)
4) 父類調用方法—透明的調用了子類的方法
簡述多態的概念,子類和父類之間轉換是遵循的規則。
多態:是具有表現多種形態的能力的特徵。專業說法:同一個實現接口,使用不同的實例而執行不同的操作。
子類轉換成父類(向上轉換)時的規則:
將一個父類的引用指向一個子類對象,稱爲向上轉型,自動進行類型轉換。
此時通過父類引用變量調用的方法是子類覆蓋或繼承父類的方法,不是父類的方法。
此時通過父類引用變量無法調用子類特有的方法。
父類到子類的轉換(向下轉型)
將一個指向子類對象的父類引用賦給一個子類的引用,稱爲向下轉型,此時必須進行強制類型轉換
案例
編碼創建一個打印機類Printer,定義抽象方法print();創建兩個子類,即針式打印機類DotMatrixPrinter和噴墨打印機類InkpetPrinter,並在各自類中重寫方法print(),編寫測試類實現兩種打印機;再添加一個激光打印機子類LaserPrinter,重寫方法print(),修改測試類實現該打印機打印。
//打印機類
public abstract class Printer {
public Printer(){
}
public abstract void print();
}
//針式打印機
public class DotMatrixPrinter extends Printer {
@Override
public void print() {
// TODO Auto-generated method stub
System.out.println("針式打印機");
}
}
//噴墨打印機
public class InkpetPrinter extends Printer{
@Override
public void print() {
// TODO Auto-generated method stub
System.out.println("噴墨打印機");
}
}
//激光打印機
public class LaserPrinter extends Printer{
@Override
public void print() {
// TODO Auto-generated method stub
System.out.println("激光打印機");
}
}
public class Test {
public static void main(String[] args) {
Printer dmp= new DotMatrixPrinter();
Printer ip = new InkpetPrinter();
Printer lp= new LaserPrinter();
dmp.print();
ip.print();
lp.print();
}
}