面向對象——多態

一、什麼是多態?java

二、Java中如何實現多態?函數

三、多態存在的3個必要條件spa

四、兩種形式的多態設計

五、晚聯編code

六、多態機制優勢對象

七、面向對象的主要優點blog

八、代碼重用的意義繼承

 

一、什麼是多態?接口

public class Tree { int age = 0; public void name() { System.out.println("Tree"); } public static void main(String[] args) { Tree tree = new Poplar(); tree.name(); System.out.println(tree.age); } } class Poplar extends Tree { int age = 4; public void name() { System.out.println("Poplar"); } }

output:開發

Poplar 0

多態性是OOP中的一個重要特性,主要是用來實現動態聯編的。就是程序的最終狀態只有在執行過程當中才被決定而非在編譯期間就決定了。這對於大型系統來講能提升系統的靈活性和擴展性。

二、Java中如何實現多態?

java引用變量有兩個類型:一個是編譯時的類型,一個是運行時的類型,編譯時的類型由聲明該變量時使用的類型決定,運行時的類型由實際賦給該變量的對象決定。若是編譯時類型和運行時類型不一致。就會出現所謂的多態。

三、多態存在的3個必要條件

繼承、方法重寫、父類引用指向子類對象。

注意:引用變量在編譯階段只能調用其編譯時類型所具備的方法,但運行時執行它運行時類型所具備的方法。所以,編寫java代碼時,引用變量只能調用聲明該變量時所用類裏包含的方法。例如Object o = new Person(),對象o就只能調用object類的方法。(《瘋狂Java講義》)

與方法不一樣的是,對象的屬性不具有多態性。

多態特徵:對外一個接口,內部多種實現

四、兩種形式的多態

運行時多態和編譯時多態。編譯時多態主要是經過重載(overloading)技術實現的,即在一個類中相同的方法名可用來定義多種不一樣的方法。運行時多態是在面向對象的繼承性的基礎上創建的,是運行時動態產生的多態性。

把子類當作父類處理的過程叫作上塑造型(upcasting)。

五、晚聯編

多態機制使得程序能夠只向類繼承體系的基礎類發消息,而卻能夠在運行時獲得恰當子類所提供的服務。這是如何實現的呢?

面向對象的程序設計語言實現多態的技術是動態綁定或晚聯編(late binding)技術。對應於晚聯編是非面嚮對象語言編譯器所採用的早聯編(early binding)方式。早聯編方式中由編譯器產生對一個特定函數名稱的調用,由鏈接器把該方法調用解析爲該方法所對應代碼的絕對地址。面嚮對象語言由於程序直到代碼運行時才能肯定代碼的地址,因此早聯編的方式是不適用的。在晚聯編方式中,當向一個對象發消息時,所調用的代碼直到運行時刻才能肯定。語言的編譯器能夠保證該方法存在而且執行參數與返回結果的類型檢查,但殊不知道要執行的準確代碼。在運行時刻,java運行系統根據對象變量當時所指向對象的實際類型,調用該對象的相應方法。

C++爲了提升程序運行效率,方法默認是不採用晚聯編的,必須對採用晚聯編的方法用virtual關鍵字顯示說明。java中默認採用晚聯編。

六、多態機制優勢

①   使程序具備良好的可擴展性(對於一個類體系能夠動態增長新的類型或減小類型,已經存在的訪問這個類體系對象的代碼依然能夠正常工做)

②   使程序易於編寫,易於維護,而且易於理解(在對具備繼承關係的一組類進行處理時,只要根據這組類中的基礎類接口編寫一個方法就能夠了,不用針對不一樣的子類專門編寫代碼,簡化程序編寫且易於維護,使程序結構獲得簡化,易於理解)

七、面向對象的主要優點

更好的可重用性、可擴展性、可管理和可維護性。最大的優點是代碼重用。可重用的代碼是類和對象,面線對象中的數據抽象、封裝、繼承、多態等特徵都圍繞和體現了代碼重用的思想。

八、代碼重用的意義

◆ 因爲使用大量可重用的類庫,提升了開發效率,縮短了開發週期,下降了開發成本;

◆ 因爲採用了已經被證實爲正確、有效的類庫,提升了程序代碼的可靠性,減小了程序的維護工做量;

◆ 提升了程序的標準化程度

相關文章
相關標籤/搜索