Java中的抽象類和抽象方法(abstract)-創(chuàng)新互聯(lián)

抽象類 一、為什么要有抽象類?

想象一下,有一個父類Animal,子類有Dog,Tiger,Cat等等。我們實例化一個Dog類型orTiger類型的變量(即new Dog())看起來是很合理的事。但是!如果我們實例化一個Animal類型的變量,即new Animal(),是不是看起來有一點奇怪?Animal的實例化對象是什么?Dog是一條狗,Cat是一只貓,Animal是什么???

“專業(yè)、務(wù)實、高效、創(chuàng)新、把客戶的事當(dāng)成自己的事”是我們每一個人一直以來堅持追求的企業(yè)文化。 成都創(chuàng)新互聯(lián)是您可以信賴的網(wǎng)站建設(shè)服務(wù)商、專業(yè)的互聯(lián)網(wǎng)服務(wù)提供商! 專注于網(wǎng)站設(shè)計制作、成都做網(wǎng)站、軟件開發(fā)、設(shè)計服務(wù)業(yè)務(wù)。我們始終堅持以客戶需求為導(dǎo)向,結(jié)合用戶體驗與視覺傳達,提供有針對性的項目解決方案,提供專業(yè)性的建議,創(chuàng)新互聯(lián)建站將不斷地超越自我,追逐市場,引領(lǐng)市場!

因此,我們發(fā)現(xiàn)有些類是不應(yīng)該被初始化的。(即不應(yīng)該存在被實例化的對象)

在本例子中,Animal就是抽象類,而Dog、Tiger和Cat這些都是具體類。

Fig.1 抽象類和具體類

二、設(shè)計抽象類

而在java中,要想讓一個類不被初始化,只需要在類的聲明前面加上關(guān)鍵字abstract即可。

abstract class Animal{
    public void roam();
}

抽象類代表沒有人能夠創(chuàng)建出該類的實例化對象,編譯器不會通過。

三、抽象類聲明引用變量

雖然抽象類無法實例化對象,但是抽象類仍然可以聲明引用變量,抽象類只是無法實例化對象。

abstract class Animal{
    public void roam();
}

public class MakeAnimal{
    public void go(){
        Animal a;      //抽象類可以聲明引用變量
        a = new Dog();
        a = new Cat(); //該部分涉及多態(tài)的內(nèi)容
        a.roam();
    }
}
四、Tips
  1. 抽象類除了被繼承以外,沒有其他的用途和目的。
  2. 若繼承了一個抽象類,就必須要實現(xiàn)該抽象類的所有抽象方法(非抽象方法可寫可不寫)。
  3. 抽象類中不一定有抽象方法。
  4. 但是有抽象方法的類一定是抽象類。
  5. 抽象類強制子類實現(xiàn)父類沒有實現(xiàn)的功能,提高代碼的復(fù)用性。
  6. final和abstract不能共存,final修飾的類不能繼承、類中的方法不能重寫。這與abstract修飾的類就是用來繼承,方法就是用來重寫的目的相悖。
  7. private和abstract不能共存,因為private修飾的類只能在本類中使用,與抽象類的作用相悖。

抽象方法 一、概念

抽象方法和抽象類一樣,都是用abstract關(guān)鍵字修飾。它的特點在于抽象方法沒有方法體:

public abstract void eat();  //沒有方法體,直接結(jié)束
二、為什么要有抽象方法?

因為有時沒有辦法給任何子類都抽象出都有意義的共同程序代碼。而抽象方法可以實現(xiàn)即使無法實現(xiàn)出方法的內(nèi)容,但是仍然可以定義出一組子類共同遵守的協(xié)議。(即都要實現(xiàn)的方法,即使父類中沒有方法體)

三、Tips
  1. 如果聲明出一個抽象的方法,則必須將該類也聲明為abstract,因為不可以在非抽象類中擁有抽象方法。就算只有一個抽象方法,也要將此類標(biāo)記為抽象類。
  2. 抽象方法的好處是實現(xiàn)多態(tài)。
  3. 在繼承樹結(jié)構(gòu)下的第一個具體類必須要實現(xiàn)所有的抽象方法。但是實現(xiàn)負擔(dān)可以向下傳遞,例如第一級父類是abstract,第二級類仍然是abstract,則第二級類就不用實現(xiàn)抽象方法,直到具體類出現(xiàn)。
  4. 還記得抽象類既可以擁有抽象方法,也可以擁有非抽象方法嗎?因此在3中說到的第二級abstract類也是可以去實現(xiàn)第一級abstract父類的抽象方法。這時出現(xiàn)的繼承樹下方的具體類就不必再實現(xiàn)第一級abstract父類的抽象方法。
  5. 必須實現(xiàn)所有抽象方法指的是:必須以相同的方法名、參數(shù)列表和返回值類型創(chuàng)建出非抽象的方法。(具體類中的方法體仍然可以是空的,盡管java很重視有沒有實現(xiàn)這些方法)。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站標(biāo)題:Java中的抽象類和抽象方法(abstract)-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://bm7419.com/article18/ijodp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站排名、App開發(fā)、全網(wǎng)營銷推廣、虛擬主機、網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化