150天打卡day16_抽象方法和抽象類
回顧
static:靜態(tài)的
靜態(tài)變量:類,方法區(qū),一份,類名點(diǎn)來訪問
所有對(duì)象所共享的數(shù)據(jù)(圖片、音頻、視頻等)
靜態(tài)方法:類,方法區(qū),一份,類名點(diǎn)來訪問
沒有隱式this傳遞,不能直接訪問實(shí)例成員方法的操作僅與參數(shù)相關(guān)而與對(duì)象無關(guān)
靜態(tài)塊:類,在類被加載期間自動(dòng)執(zhí)行,一次
初始化/加載靜態(tài)資源(圖片、音頻、視頻等)
final:不可改變的、最終的,變量不能被改變,方法不能被重寫,類不能被繼承
static final:常量
必須聲明同時(shí)初始化,類名點(diǎn),不能改,
建議:所有字母大寫,多個(gè)單詞_分隔
一個(gè)數(shù)永遠(yuǎn)不變,常常使用
what
面向?qū)ο筇卣鳎悍庋b、繼承和多態(tài)
在Java中抽象類表示的是一種繼承關(guān)系,一個(gè)類只能繼承一個(gè)抽象類,而一個(gè)類卻可以實(shí)現(xiàn)多
個(gè)接口。
在面向?qū)ο蟮母拍钪校械膶?duì)象都是通過類來描繪的,但是反過來,并不是所有的類都是用
來描繪對(duì)象的,如果一個(gè)類中沒有包含足夠的信息來描繪一個(gè)具體的對(duì)象,這樣的類就是抽象
類。
抽象類除了不能實(shí)例化對(duì)象之外,類的其它功能依然存在,成員變量、成員方法和構(gòu)造方法的
訪問方式和普通類一樣。
由于抽象類不能實(shí)例化對(duì)象,所以抽象類必須被繼承,才能被使用。也是因?yàn)檫@個(gè)原因,通常
在設(shè)計(jì)階段決定要不要設(shè)計(jì)抽象類。
?父類包含了子類集合的常見的方法,但是由于父類本身是抽象的,所以不能使用這些方法。
?
why
問:一般類里定義的方法,子類也可以覆蓋,沒必要定義成抽象的啊?
答:其實(shí)不是說抽象類有什么用,一般類確實(shí)也能滿足應(yīng)用,但是現(xiàn)實(shí)中確實(shí)有些父類中的方
法確實(shí)沒有必要寫,因?yàn)楦鱾€(gè)子類中的這個(gè)方法肯定會(huì)有不同,所以沒有必要在父類里寫。
抽象方法
用abstract 定義的方法稱之為是抽象方法,抽象方法沒有方法體,在小括號(hào)后面用“分號(hào)”結(jié)尾。
通過具體的案例來講解抽象類的抽象方法。
案例:做加減法運(yùn)算器
以上兩個(gè)類存在大量的代碼,這時(shí)就可以向上抽取出一個(gè)父類Cal類,讓所有的加減乘除子類繼承于Cal類
由于getResult方法具體的實(shí)現(xiàn)不明確,不完整,所以可以定義為抽象方法,沒有方法體,小括號(hào)后直接用分號(hào)結(jié)尾。
?public abstract int getResult();
由abstract修飾
抽象方法必須放在抽象類中
只有方法的定義,沒有具體的實(shí)現(xiàn)(連大括號(hào)都沒有)
父類的抽象方法必須由子類重寫實(shí)現(xiàn)。
抽象類
繼承抽象類
抽象類不能實(shí)例化,一個(gè)類繼承了抽象類后必須重寫父類的抽象方法,不同的子類可以有不同
的實(shí)現(xiàn)。
總結(jié):
由abstract修飾
包含抽象方法的類必須是抽象類---抽象方法是不完整的放在不完整的類中
? ? 不包含抽象方法的類也可以聲明為抽象類------我樂意
抽象類不能被實(shí)例化(單獨(dú)存在沒有意義,類是為了生產(chǎn)對(duì)象的)
抽象類是需要被繼承的,子類:
重寫抽象類的所有抽象方法----變不完整為完整
也聲明為抽象類--------------一般不這么做
抽象類的意義
封裝子類共有的屬性和行為 ? ? (代碼復(fù)用)
為所有子類提供統(tǒng)一的類型 ? ? ? ?(向上造型)
可以包含抽象方法,為所有的子類提供了統(tǒng)一的入口,每個(gè)子類的實(shí)現(xiàn)不同,但是入口是一致的。
案列:根據(jù)周長(zhǎng)計(jì)算圓形和正方形的面積
注:正方形的面積公式為:0.0625*c*c。圓形的面積公式為:0.0796*c*c,其中,c表示圖形的周長(zhǎng)。
?
步驟一:創(chuàng)建抽象類Shape,它提供所有屬性所共同擁有的方法和屬性,聲明抽象方法area()求面積,只是提供了對(duì)外統(tǒng)一的入口,至于子類怎么計(jì)算,與他無關(guān)。
步驟二:聲明子類 Square(正方形)和 Circle(矩形)繼承于Shape父類,并實(shí)現(xiàn)抽象的area()方法。
Triange(三角形)類
Circle(圓形)類
?
歡迎??點(diǎn)贊+關(guān)注,筆芯??
