多態及實現方式

多態的定義java

  多態性是面向對象編程的又一個重要特徵,它是指在父類中定義的屬性和方法被子類繼承以後,能夠具備不一樣的數據類型或表現出不一樣的行爲,這使得同一個屬性或方法在父類及其各個子類中具備不一樣的含義。編程

  對面向對象來講,多態分爲編譯時多態和運行時多態。其中編譯時多態是靜態的,主要是指方法的重載,它是根據參數列表的不一樣來區分不一樣的方法。經過編譯以後會變成兩個不一樣的方法,在運行時談不上多態。而運行時多態是動態的,它是經過動態綁定來實現的,也就是你們一般所說的多態性。模塊化

爲何須要多態?spa

多態的做用:.net

1.提升程序可複用性 設計

  首先講封裝和繼承:封裝是把過程和數據包圍起來,對數據的訪問只能經過已定義的界面,他把實現的細節影藏起來了,好比你在java中去實現一個類,這個類中提供了一些功能方法,你只須要知道你須要傳遞什麼樣的參數,會達到什麼樣的效果,實現細節在類中定義好了。從而使得代碼模塊化;而繼承能夠擴展已存在的代碼模塊,目的是實現代碼重用。對象

  運用多態,應用程序沒必要爲每個派生類編寫功能調用,只須要對抽象基類進行處理便可。大大提升程序的可複用性。blog

2.解耦合,提升可擴充性和可維護性繼承

  耦合度講的是模塊模塊之間,代碼代碼之間的關聯度,經過對系統的分析把他分解成一個一個子模塊,子模塊提供穩定的接口,達到下降系統耦合度的的目的,模塊模塊之間儘可能使用模塊接口訪問,而不是隨意引用其餘模塊的成員變量。接口

  派生類的功能能夠被基類的方法或引用變量所調用,這叫向後兼容,能夠提升可擴充性和可維護性。 

多態的實現

  這裏以java爲例。Java 實現多態有 3 個必要條件:繼承、重寫和向上轉型。只有知足這 3 個條件,開發人員纔可以在同一個繼承結構中使用統一的邏輯實現代碼處理不一樣的對象,從而執行不一樣的行爲。

  • 繼承:在多態中必須存在有繼承關係的子類和父類。
  • 重寫:子類對父類中某些方法進行從新定義,在調用這些方法時就會調用子類的方法。
  • 向上轉型:在多態中須要將子類的引用賦給父類對象,只有這樣該引用才既能能夠調用父類的方法,又能調用子類的方法。

  編譯時多態

  方法重載都是編譯時多態。根據實際參數的數據類型、個數和次序,Java在編譯時可以肯定執行重載方法中的哪個。

  方法覆蓋表現出兩種多態性,當對象引用本類實例時,爲編譯時多態,不然爲運行時多態。

  example

  

      public class Test {  
           public static void main(String[] args) {  
              Person person = new Person();         // 對象引用本類實例  
              Student student = new Student();                
              System.out.println(person.show()); // 編譯時多態,執行Person類的show() 方法
              System.out.println(student.show()); // 編譯時多態,執行student類的show() 方法 
              }  
      }  
    
      class Person{  
              public String show() {  
              String name = "person";  
              return name;  
           }  
      }  
    
      class Student extends Person{  
           public String show(){  
             String name = "student";  
              return name;  
             }  
      }  

   運行時多態

  父類對象p引用子類實例時

  1. Person p = new Student();     
  2. p.show();  

   Java支持運行時多態,意爲p.show()實際執行p所引用實例的show(),究竟執行Person類仍是Student類的方法,運行時再肯定。若是Student類聲明瞭show()方法,則執行之;不然執行Person類的show()方法。

 

   程序運行時,Java從實例所屬的類(new 類)開始尋找匹配的方法執行,若是當前類中沒有匹配的方法,則沿着繼承關係逐層向上,依次在父類或各祖先類中尋找匹配方法,直到Object類。

  運行時多態性是面向對象程序設計代碼重用的一個最強大機制,動態性的概念也能夠被說成「一個接口,多個方法」。Java實現運行時多態性的基礎是動態方法調度,它是一種在運行時而不是在編譯期調用重載方法的機制

參考

 http://www.javashuo.com/article/p-xuljlory-bz.html

相關文章
相關標籤/搜索