溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java復(fù)用類舉例分析

發(fā)布時間:2021-11-24 14:30:48 來源:億速云 閱讀:113 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“Java復(fù)用類舉例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Java復(fù)用類舉例分析”吧!

1.@Override注解:當(dāng)你想要覆蓋某個方法時,由于不留心導(dǎo)致重載了該方法而并未覆蓋該方法,那么編譯器回產(chǎn)生一條錯誤信息。

2.到底是用組合還是用繼承,一個最清晰的判斷辦法就是問一問自己是否需要從新類向基類進(jìn)行向上轉(zhuǎn)型,如果必須向上轉(zhuǎn)型,則繼承是必要的,但如果不需要,則應(yīng)當(dāng)好好考慮自己是否需要繼承。

3.類中所有的private方法都隱式地指定為是final的,由于無法取用private方法,也就無法覆蓋它,可以對private方法添加final修飾詞,但這并不能給該方法增加任何額外的意義。

4.如果某方法是private,它就不是基類的接口的一部分,它僅是一些隱藏于類中的程序代碼(private方法屬于final方法,并可被自動認(rèn)為是final方法,對導(dǎo)出類是屏蔽的),只不過是具有相同名稱而已。但如果在導(dǎo)出類中以相同的方法名稱生成一個public、protected或包訪問權(quán)限方法的話,該方法就不會產(chǎn)生在基類中出現(xiàn)的“僅具有相同名稱的情況”。此時你并沒有覆蓋該方法,僅是產(chǎn)生了一個新的方法。由于private方法無法觸及且能有效隱藏,所有除了把它看成是因為它所歸屬的類的組織結(jié)構(gòu)的原因而存在外,其他任何事物都不需要考慮到它。

5.設(shè)計類時,將方法指名是final的,應(yīng)該說是明智的,這會讓別人不去覆蓋你的方法。然而要預(yù)見類是如何被復(fù)用的一般是困難的,如果考慮不周,可能會妨礙其他程序員通過繼承來復(fù)用你的類。

6.在Beetle上運行java時,所發(fā)生的第一件事就是試圖訪問Beetle.main()(一個static方法),于是加載器開始啟動并找出Bettle類的編譯代碼(在名為Beetle.class的文件中),在對它進(jìn)行加載的過程中,編譯器注意到它有一個基類(這是由關(guān)鍵字extends得知的),于是會繼續(xù)加載這個基類,不管你是否打算產(chǎn)生一個基類的對象,這都要發(fā)生。如果基類還有其自身的基類,那么這個基類的基類也會被加載,以此類推。最終,根基類的static初始化即被執(zhí)行,然后是它緊接著下面的那個導(dǎo)出類,以此類推,這種方式很重要,因為導(dǎo)出類的static初始化可能會依賴于基類成員能否被正確初始化。

7.設(shè)計一個系統(tǒng)時,目標(biāo)應(yīng)該是找到或創(chuàng)建某些類,其中每個類都有具體的用途,而且既不會太大(包含太多功能而難以復(fù)用),也不會太小(不添加其他方法就無法使用)。如果你的設(shè)計變得過于復(fù)雜,通過將現(xiàn)有類拆分為更小的部分而添加更多的對象,通常會有所幫助。

8.名詞介紹:

  • 封裝:通過合并特征和行為來創(chuàng)建新的數(shù)據(jù)類型。

  • 實現(xiàn)隱藏:通過將細(xì)節(jié)私有化把接口和實現(xiàn)分離開。

  • 多態(tài):用于消除類型之間的耦合關(guān)系。


  • 綁定:將一個方法調(diào)用同一個方法主體關(guān)聯(lián)起來。

  • 前期綁定:由編譯器和連接程序?qū)崿F(xiàn),在程序執(zhí)行前進(jìn)行綁定。它是面向過程的語言中不需要選擇就默認(rèn)的綁定方式。

  • 后期綁定:運行時根據(jù)對象的類型進(jìn)行綁定。也叫做動態(tài)綁定或運行時綁定。如果一種語言要實現(xiàn)后期綁定,就必須具有某種機(jī)制,以便在運行時能判斷對象的類型,從而調(diào)用恰當(dāng)?shù)姆椒ǎ簿褪钦f,編譯器一直不知道對象的類型,但是方法調(diào)用機(jī)制能找到正確的方法體,并加以調(diào)用。后期綁定的機(jī)制隨編程語言的不同而有所不同,但不管怎樣都必須在對象中安置某種“類型信息”。

9.Java中除了static方法和final方法(private方法屬于final方法)之外,其他所有的方法都是后期綁定。因此將一個方法聲明為final時,不僅可以防止他人覆蓋該方法,還可以“關(guān)閉”動態(tài)綁定,這樣,編譯器就可以為final方法調(diào)用生成更有效的代碼(Java的早期可以,但如今不需要了,所以最好根據(jù)設(shè)計來決定是否使用final,而不是出于提高性能的目的)。

9.向上轉(zhuǎn)型,也就是在繼承層次中向上移動,是安全的,因為基類不會具有大于導(dǎo)出類的接口,因此,通過基類接口發(fā)送的消息都能保證被接受。

10.基類的構(gòu)造器總是在導(dǎo)出類的構(gòu)造過程中被調(diào)用,而且按照繼承層次逐漸向上鏈接,以使每個基類的構(gòu)造器都能得到調(diào)用。這樣做是有意義的,因為構(gòu)造器具有一項特殊任務(wù),檢查對象能否被正確地構(gòu)造。導(dǎo)出類只能訪問自己的成員,不能方法基類的成員(因為通常為private類型)。只有基類的構(gòu)造器才具有恰當(dāng)?shù)闹R和權(quán)限來對自己的元素進(jìn)行初始化。因此,必須令所有的構(gòu)造器都得以調(diào)用,否則就不可能正確構(gòu)造完整對象,這正是編譯器為什么要強(qiáng)制每個導(dǎo)出類部分都必須調(diào)用構(gòu)造器的原因,在導(dǎo)出類的構(gòu)造器主體中,如果沒有明確指定調(diào)用某個基類構(gòu)造器,它就會默認(rèn)調(diào)用默認(rèn)構(gòu)造器,如果不存在默認(rèn)構(gòu)造器,編譯器就會報錯(如果某個類無任何構(gòu)造器,編譯器就會自動合成出一個默認(rèn)構(gòu)造器)。

例子:

class Meal {
   
   
   Meal() {
   
   
   System.out.println("Meal()");}}class Bread {
   
   
   Bread() {
   
   
   System.out.println("Bread()");}}class Cheese {
   
   
   Cheese() {
   
   
   System.out.println("Cheese()");}}class Lettuce {
   
   
   Lettuce() {
   
   
   System.out.println("Lettuce()");}}class Lunch extends Meal {
   
   
   Lunch() {
   
   
   System.out.println("Lunch()");}}class PortableLunch extends Lunch {
   
   
   PortableLunch() {
   
   
   System.out.println("PortableLunch()");}}public class Sandwich extends PortableLunch {
   
   
   private Bread b = new Bread();private Cheese c = new Cheese();private Lettuce l = new Lettuce();public Sandwich() {
   
   
   System.out.println("Sandwich()");}public static void main(String[] args) {
   
   
   new Sandwich();}}

運行結(jié)果:
Java復(fù)用類舉例分析

到此,相信大家對“Java復(fù)用類舉例分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI