更新時(shí)間:2020-11-11 17:55:33 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2123次
在面向?qū)ο蟮母拍钪校械膶?duì)象都是通過(guò)類來(lái)描繪的,但是反過(guò)來(lái),并不是所有的類都是用來(lái)描繪對(duì)象的,如果一個(gè)類中沒(méi)有包含足夠的信息來(lái)描繪一個(gè)具體的對(duì)象,這樣的類就是抽象類。換種方式闡述抽象類就是被abstract修飾的類,包含抽象方法的類就是抽象類,同樣的,使用abstrac關(guān)鍵字修飾的方法就是抽象方法。抽象類和抽象方法乍一看很簡(jiǎn)單,但再仔細(xì)一看又有很多彎彎繞繞,容易誤入歧途。
下面我們就來(lái)帶大家繞開(kāi)這些彎彎繞繞,直擊抽象類和抽象方法的核心內(nèi)容,理清抽象類和抽象方法的關(guān)系:
一、抽象類
抽象類往往用來(lái)表征對(duì)問(wèn)題領(lǐng)域進(jìn)行分析、設(shè)計(jì)中得出的抽象概念,是對(duì)一系列看上去不同,但是本質(zhì)上相同的具體概念的抽象。簡(jiǎn)而言之,抽象類就是被abstract修飾的類,包含抽象方法的類就是抽象類。
通過(guò)abstract方法定義規(guī)范,然后要求子類必須定義具體實(shí)現(xiàn)。通過(guò)抽象類,我們就可以做到嚴(yán)格限制子類的設(shè)計(jì),使子類之間更加通用。(程序的可擴(kuò)展和可維護(hù)性)。抽象類在Java語(yǔ)言中表示的是一種繼承關(guān)系,一個(gè)類只能使用一次繼承關(guān)系。但是,一個(gè)類卻可以實(shí)現(xiàn)多個(gè)接口。
抽象類的特征:
1.抽象類不能實(shí)例化,即不能用new來(lái)實(shí)例化抽象類。
2.抽象類中包含有構(gòu)造方法,但構(gòu)造方法不能用來(lái)new實(shí)例,只能用來(lái)被子類調(diào)用。
3.抽象類中可以包含成員變量,成員方法,靜態(tài)方法,構(gòu)造方法,final 修飾的方法,抽象方法
4. 抽象類只能用來(lái)被繼承。
二、抽象方法
使用abstract修飾的方法,沒(méi)有方法體,只有聲明。定義的是一種“規(guī)范”,就是告訴子類必須要給抽象方法提供具體的實(shí)現(xiàn)。抽象方法一般存在于抽象類或接口中。
抽象方法的特征:
1.抽象方法不允許有方法體,只能以分號(hào)“;”結(jié)尾
2.有抽象方法的類只能定義成抽象類(含有抽象方法的類必須是抽象類)
3.抽象類中可以包含 0 個(gè)或多個(gè)抽象方法
4.抽象方法必須被子類實(shí)現(xiàn)
5.如果子類不能實(shí)現(xiàn)父類中的抽象方法,那么子類也必須是抽象類
三、抽象類和抽象方法的基本用法(什么情況下使用抽象方法和抽象類 )
父類的名稱比較抽象,創(chuàng)建對(duì)象無(wú)意義。
/**
* 抽象類
*/
abstract class Animal {
abstract public void shout(); //抽象方法
public Animal(){
System.out.println("Animal類中的無(wú)參構(gòu)造...");
}
}
class Dog extends Animal {
//子類必須實(shí)現(xiàn)父類的抽象方法,否則編譯錯(cuò)誤
public void shout() {
System.out.println("汪汪汪!");
}
public Dog(){
super();//調(diào)用直接父類的無(wú)參構(gòu)造,系統(tǒng)默認(rèn)調(diào)用(可以省略)
System.out.println("Dog類中的無(wú)參構(gòu)造...");
}
}
class Cat extends Animal {
public void shout() {
System.out.println("喵喵喵!");
}
}
/**
* 如果子類不能實(shí)現(xiàn)父類中的抽象方法,那么子類也必須是抽象類
*/
abstract class Pig extends Animal{
}
/**
* 測(cè)試抽象類
*/
public class TestAbstractClass {
public static void main(String[] args) {
// Animal a = new Animal();//編譯出錯(cuò),抽象類不能實(shí)例化
Animal a1 = new Dog();
a1.shout();
Animal a2 = new Cat();
a2.shout();
}
}
關(guān)于抽象類和抽象方法的講述就到這里,如果你能消化本文中的所有內(nèi)容,那么理清抽象類和抽象方法的關(guān)系問(wèn)題不大。如果你擋不住自己求知的腳步,請(qǐng)觀看本站的Java教程,超全面的Java知識(shí)將充實(shí)你的學(xué)習(xí)生活!
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)