當前位置:編程學習大全網 - 編程語言 - 在java中實例化壹個子類對象賦給父類對象引用或壹個實現了接口的類的對象賦給接口的引用,有什麽好處?

在java中實例化壹個子類對象賦給父類對象引用或壹個實現了接口的類的對象賦給接口的引用,有什麽好處?

這個問題不難!這是多態的壹種應用:

把不同的子類對象都當作父類來看,可以屏蔽不同子類對象之間的差異,寫出通用的代碼,做出通用的編程,以適應需求的不斷變化。

賦值之後,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作。也就是說,父親的行為像兒子,而不是兒子的行為像父親。

舉個例子:從壹個基類中派生,響應壹個虛命令,產生不同的結果。

比如從某個基類繼承出多個對象,其基類有壹個虛方法Tdoit,然後其子類也有這個方法,但行為不同,然後這些子對象中的任何壹個可以賦給其基類的對象,這樣其基類的對象就可以執行不同的操作了。實際上妳是在通過其基類來訪問其子對象的,妳要做的就是壹個賦值操作。

使用繼承性的結果就是可以創建壹個類的家族,在認識這個類的家族時,就是把導出類的對象當作基類的對象,這種認識又叫作upcasting。這樣認識的重要性在於:我們可以只針對基類寫出壹段程序,但它可以適應於這個類的家族,因為編譯器會自動就找出合適的對象來執行操作。這種現象又稱為多態性。而實現多態性的手段又叫稱動態綁定(dynamicbinding)。

簡單的說,建立壹個父類的對象,它的內容可以是這個父類的,也可以是它的子類的,當子類擁有和父類同樣的函數,當使用這個對象調用這個函數的時候,定義這個對象的類(也就是父類)裏的同名函數將被調用,當在父類裏的這個函數前加virtual關鍵字,那麽子類的同名函數將被調用。

例子  在C++中:

classA{

public:

A(){}

virtualvoidfoo(){

coutfoo();

if(a!=NULL)

deletea;

return0;

}

這將顯示:

ThisisB.

如果把virtual去掉,將顯示:

ThisisA.

前面的多態實現使用抽象類,並定義了虛方法.

在java中:

多態,是面向對象的程序設計語言最核心的特征。多態,意味著壹個對象有著多重特征,可以在特定的情況下,表現不同的狀態,從而對應著不同的屬性和方法。從程序設計的角度而言,多態可以這樣來實現(以java語言為例):

publicinterfaceParent{

publicvoidsimpleCall();

}

publicclassChild_AimplementsParent{

publicvoidsimpleCall(){

//具體的實現細節;

}

}

publicclassChild_BimplementsParent{

publicvoidsimpleCall(){

//具體的實現細節;

}

}

//當然還可以有其他的實現

然後,我們就可以看到多態所展示的特性了:

Parentpa=newChild_A();

pa.simpleCall()則顯然是調用Child_A的方法;

Parentpa=newChild_B();

pa.simpleCall()則是在調用Child_B的方法。所以,我們對於抽象的父類或者接口給出了我們的具體實現後,pa可以完全不用管實現的細節,只訪問我們定義的方法,就可以了。事實上,這就是多態所起的作用,可以實現控制反轉這在大量的J2EE輕量級框架中被用到,比如Spring的依賴註射機制。

  • 上一篇:風向編程器
  • 下一篇:關於退役軍人無息貸款
  • copyright 2024編程學習大全網