多態 ( 向上造型、向下造型)


                                          實現多態的前提

 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顯示圖片");
  }
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM