當前位置:才華齋>計算機>java語言>

關於Java的多型性

java語言 閱讀(7.46K)

多型性有兩種:

關於Java的多型性

1)編譯時多型性

對於多個同名方法,如果在編譯時能夠確定執行同名方法中的哪一個,則稱為編譯時多型性.

2)執行時多型性

如果在編譯時不能確定,只能在執行時才能確定執行多個同名方法中的`哪一個,則稱為執行時多型性.

方法覆蓋表現出兩種多型性,當物件獲得本類例項時,為編譯時多型性,否則為執行時多型性,例如:

XXXX x1 = new XXXX(引數列表); //物件獲得本類例項,物件與其引用的例項型別一致

XXX xx1 = new XXX(引數列表);

ring(); //編譯時多型性,執行XXX類的方法.

ring(); //編譯時多型性,執行XXXX類覆蓋的方法.

XXXX為XXX的父類.

由於子類物件既是父類物件,父類物件與子類物件之間具有賦值相容性,父類物件能夠被賦值為子類物件.例如,

XXXX x2 = new XXX(引數列表); //父類物件獲得子類例項,子類物件即是父類物件

ring(); //執行時多型

x2宣告為父類物件卻獲得子類XXX的例項,那麼ring()究竟執行父類方法還是執行子類覆蓋的方法呢?

這分為兩種情況:

取決於子類是否覆蓋父類方法.如果子類覆蓋父類方法,則執行子類方法;

如果沒有覆蓋,則執行父類方法.

在編譯時,僅僅依據物件所屬的類,系統無法確定到底應該執行那個類的方法,只有執行時才能確定,因此這是執行時多型.

父類物件並不能執行所有的子類方法,只能執行那些父類中宣告子類覆蓋的子類方法.