實現多態的前提 1。 要有繼承 2。 要有方法重寫,沒有也可以,但是沒有的話 就沒有意義 3。 要有父類引用 指向子類對象 如: 父類 f=new 子類(); * 多態中的成員訪問特點 * A, 成員變數 編譯看左邊, 運行看左邊 * B, 構造方法 創建子類對象的時候,,訪問 父類的構造方法, 對 ...
實現多態的前提
1。 要有繼承
2。 要有方法重寫,沒有也可以,但是沒有的話 就沒有意義
3。
要有父類引用 指向子類對象 如: 父類 f=new 子類();
* 多態中的成員訪問特點
* A, 成員變數 編譯看左邊, 運行看左邊
* B, 構造方法 創建子類對象的時候,,訪問 父類的構造方法, 對父類的數據進行初始化
* c.成員方法 編譯看左邊 ,運行看右邊
* d. 靜態方法 編譯看左邊 , 運行看左邊 (靜態和類相關,算不上重寫,所以訪問還是左邊)
1,向上造型
優點: 合理運用向上造型 ,能夠減少代碼量,優化代碼.總結如下:
弊端: 使用向上造型,會使子類中特有的方法丟失
類型提升,自動類型轉換
基本類型自動類型轉換
byte → short → int → long → float → double
↑
char
引用類型自動類型轉換(向上造型)
小類型 → 自動轉換 → 大類型 //父類引用調用子類對象
exp Dog dog=new Dog(); Animal animal=dog;
等價於
Animal animal=new Dog();
package test01;
import org.omg.CORBA.PUBLIC_MEMBER;
public class Test01 {
public static void main(String[] args){
//----------------使用向上造型-------------
Test01 test=new Test01();
test.display(new LcdDisplayer ());
test.display(new HwDisplayer());
//---------------不使用向上造型----------------------
test.display(new LcdDisplayer());
test.display(new HwDisplayer());
}
//--------------向上造型,相同的方法只寫一遍,簡化了代碼量----------------
public void display(Displayer dis){
dis.displayText();
dis.displayGraph();
}
//--------------不使用向上造型,相同的方法要重覆寫--------------------
public void display(LcdDisplayer dis){
dis.displayText();
dis.displayGraph();
}
public void display(HwDisplayer dis){
dis.displayText();
dis.displayGraph();
}
}
//-----------------------------------
class Displayer{//顯示器 父類
public void displayText(){
System.out.println("顯示文字");
}
public void displayGraph(){
System.out.println("顯示圖片");
}
}
//----------------------------------------
class LcdDisplayer extends Displayer{//子類.繼承父類
public void displayText(){
System.out.println("LCD顯示文字");
}
public void displayGraph(){
System.out.println("LCD顯示圖片");
}
public void other(){
System.out.println("子類B1方法");
}
}
//--------------------------------------------
class HwDisplayer extends Displayer {//子類,繼承父類
public void displayText(){
System.out.println("HW顯示文字");
}
public void displayGraph(){
System.out.println("HW顯示圖片");
}
}