當前位置:歷史故事大全網 - 歷史上的今天 - java中的復用類是什麽意思?

java中的復用類是什麽意思?

代碼重用可以大大簡化我們的工作。在面向對象語言中,代碼重用壹般是通過重用類來實現的,Java也不例外。在Java中,有兩種重用類的方法:合成(has-a)和繼承(is-a)。組合是直接在新類中創建舊類的對象,這裏我們只重用代碼的功能,而不是它的形式。繼承就是在原有類的基礎上建立壹個新的類。新類具有舊類的形式,但也添加了壹些新功能。本章主要介紹綜合與繼承的知識。

第壹,合成中使用的語法

合成的語法很簡單,直接把要重用的類的對象的引用放到新的類裏就行了。當然,僅此還不夠。我們需要創建壹個這個類的對象,這樣引用就可以指向它。因為Java不會自動為我們創建壹個默認對象,它只會自動為我們將字段中的引用初始化為null。可以在三個地方給引用賦值,壹個是在定義引用時,另壹個是在構造函數中,第三個是在使用對象之前。為了防止忘記在使用前給引用賦值,我們壹般應該在前兩種情況下創建對象。如果我們要創建的對象會花很多錢,而且不壹定每次都要創建,那麽可以考慮第三種方式來創建這個對象。

第二,繼承使用的語法

繼承是Java的重要組成部分,因為Java使用的是單根系統(C++不是這樣,因為要兼容C),所以我們定義的每壹個類都是從Java中的根類對象類繼承而來的。當定義從自己的類繼承的類時,使用extends關鍵字,後跟基類的名稱,這意味著新定義的類從該基類繼承。Java不允許多重繼承(C++允許),也就是不允許壹個類有多個基類。這個缺點可以通過接口來彌補,因為Java允許壹個類實現任意數量的接口。

壹個子類會自動獲取基類中的所有字段和方法(那些被訪問控制器控制的,對子類不可見的成員也會獲取,只是不可見沒用),這就是基類中代碼的重用。除了從基類自動獲取的代碼外,還可以在子類中定義新成員,基類中的方法也可以被覆蓋(所謂覆蓋就是方法的聲明部分相同但實現不同),這樣同樣簽名的方法可以有不同的形狀。

因為子類自動擁有基類的成員,所以在子類中調用基類的方法是很自然的。如果這個方法在子類中被覆蓋了,編譯器知道妳調用的是哪個方法嗎?Java提供了壹個super關鍵字來引用類的基類,我們可以通過這個關鍵字明確表示要使用基類中的成員。如果不寫super,編譯器會理解為嵌套調用。

這裏說個題外話。在Java程序中,public類中的main()方法經常被用作整個程序的入口。這樣的靜態main()方法不壹定要出現在public類中。靜態main()方法可以是所有類的入口(但只能是main(),不能是任何有其他名字的靜態方法)。例如,壹個程序由多個類組成,當我們想要對其中壹個類進行單元測試時,我們可以將main()添加到這個類文件中,生成。編譯後這個類的類文件,並通過java在控制臺上運行。

子類繼承基類後,它在基類中有成員,所以它可以通過創建的子類對象訪問基類中可見的成員。Java是如何做到這壹點的?當我們創建子類對象時,這裏創建的對象不是類對象,而是這個類的基類的對象,創建後包含在子類對象中。也就是說,創建的子類對象擁有其基類的所有成員(從中我們可以知道為什麽可以上傳),但是子類對象只能訪問其在基類中可以看到的成員。那麽在創建這樣壹個對象的時候,子類和基類對象的創建順序是怎樣的呢?為了正確初始化基類,通常調用基類的構造函數進行初始化。在Java中,調用子類的構造函數時,會先自動調用基類的構造函數,這個過程是壹層壹層傳遞的。比如C繼承B and B繼承A,在創建C的對象時,C的構造函數會先調用B的構造函數,然後B的構造函數會先調用A的構造函數。(如果基類中沒有默認的構造函數,編譯時會報錯。)但是這裏自動調用的是基類的默認構造函數(不帶參數)。想用參數調用基類的構造函數,應該怎麽做?如上所述,基類的引用可以用super代替。就像在構造函數中通過this調用這個類的其他構造函數壹樣,我們可以通過super調用帶參數的基類的構造函數,比如“super(i,j)”。和調用這個類的其他構造函數壹樣,對基類構造函數的顯示調用需要放在子類構造函數的前面,前面不能有任何東西。如果基類的構造函數拋出異常,需要被捕獲,那就比較麻煩了。

  • 上一篇:長沙美食攻略(探索湖南美食必備指南)
  • 下一篇:為什麽中國歷史上很少提到元朝?
  • copyright 2024歷史故事大全網