多態性:多態性是指允許不同子類型的物件對相同訊息作出不同的回應。簡單的說就是用同樣的物件引用呼叫同樣的方法但是做了不同的事情。多態性分為編譯時的多態性與執行時期的多態性。
如果將物件的方法視為物件向外界提供的服務,那麼運行時的多態性可以解釋為:當A系統存取B系統提供的服務時,B系統有多種提供服務的方式,但一切對A系統來說都是透明的(就像電動刮鬍刀是A系統,它的供電系統是B系統,B系統可以使用電池供電或用交流電,甚至還有可能是太陽能,A系統只會透過B類物件呼叫供電的方法,但並不知道供電系統的底層實作是什麼,究竟透過何種方式獲得了動力)。
方法重載(overload)實作的是編譯時的多態性(也稱為前綁定),而方法重寫(override)實作的是執行時期的多態性(也稱為後綁定)。
執行階段的多型是物件導向最精髓的東西,要實作多型別需要做兩件事:
方法重寫(子類別繼承父類別並重寫父類別中已有的或抽象的方法);
物件造型(用父類型引用引用子類型對象,這樣同樣的引用調用同樣的方法就會根據子類別物件的不同而表現出不同的行為)。
java中的引用变量有两个类型:一个编译时类型,一个是运行时类型。编译时类型由声明该变量使用的类型决定,运行时类型由实际赋给 该变量的对象决定。如果编译时类型与运行时类型不一致,就可能出现所谓的多态。——疯狂java讲义
運行時多態的使用範例如下:
public class PolyTest5 { public void run(Car car)//这样利用公共的父类就屏蔽了子类之间的差异性,可以应对所有的车. { car.run();//只要子类继承了car都可以作为参数传入方法中.如果没有多态,就要有对应每个类的方法.非常的麻烦. } public static void main(String[] args) { PolyTest5 test = new PolyTest5(); Car car = new BMW(); test.run(car); QQ qq = new QQ(); test.run(qq);//向上类型转换. } } class Car { public void run() { System.out.println("car is running"); } } class BMW extends Car { public void run() { System.out.println("BMW is running"); } } class QQ extends Car { public void run() { System.out.println("QQ is running"); } }
多態的三要素:1.繼承2.重寫 3.父類別引用指向子類別物件。
相關學習推薦:java基礎教學
以上是java中的多態怎麼理解的詳細內容。更多資訊請關注PHP中文網其他相關文章!