day08_面向?qū)ο骭抽象類和接口

抽象類

抽象類的概述:

動(dòng)物不應(yīng)該定義為具體的東西蝴罪,而且動(dòng)物中的吃钠四,睡等也不應(yīng)該是具體的幔嫂。
我們把一個(gè)不是具體的功能稱為抽象的功能驴党,而一個(gè)類中如果有抽象的功能瘪撇,該類必須是抽象類。

抽象類的特點(diǎn):

A:抽象類和抽象方法必須用abstract關(guān)鍵字修飾
B:抽象類中不一定有抽象方法,但是有抽象方法的類必須定義為抽象類
C:抽象類不能實(shí)例化

因?yàn)樗皇蔷唧w的港庄。
抽象類有構(gòu)造方法倔既,但是不能實(shí)例化?構(gòu)造方法的作用是什么呢?
用于子類訪問父類數(shù)據(jù)的初始化
D :抽象的子類
a:如果不想重寫抽象方法,該子類是一個(gè)抽象類鹏氧。
b:重寫所有的抽象方法渤涌,這個(gè)時(shí)候子類是一個(gè)具體的類。
換句話說把还,如果抽象類的子類不是抽象類实蓬,則需要重寫父類所有的抽象方法。

抽象類的實(shí)例化其實(shí)是靠具體的子類實(shí)現(xiàn)的吊履。是多態(tài)的方式瞳秽。
Animal a = new Cat();

抽象類的成員特點(diǎn):

成員變量:既可以是變量,也可以是常量率翅。
構(gòu)造方法:有。
用于子類訪問父類數(shù)據(jù)的初始化袖迎。
成員方法:既可以是抽象的冕臭,也可以是非抽象的。

抽象類的成員方法特性:

A:抽象方法 強(qiáng)制要求子類做的事情燕锥。
B:非抽象方法 子類繼承的事情辜贵,提高代碼復(fù)用性。
抽象類的抽象方法是不給出具體實(shí)現(xiàn)的归形,以();結(jié)束


接口

接口的特點(diǎn):

A:接口用關(guān)鍵字interface表示
interface 接口名 {}
B:類實(shí)現(xiàn)接口用implements表示
class 類名 implements 接口名 {}
C:接口不能實(shí)例化
那么托慨,接口如何實(shí)例化呢?
按照多態(tài)的方式來實(shí)例化。
D:接口的子類
a:可以是抽象類暇榴。但是意義不大厚棵。
b:可以是具體類蕉世。要重寫接口中的所有抽象方法。(推薦方案)

由此可見:

A:具體類多態(tài)(幾乎沒有)
B:抽象類多態(tài)(常用)
C:接口多態(tài)(最常用)

接口成員特點(diǎn)

成員變量婆硬;只能是常量狠轻,并且是靜態(tài)的。
默認(rèn)修飾符:public static final
建議:自己手動(dòng)給出彬犯。
構(gòu)造方法:接口沒有構(gòu)造方法向楼。
成員方法:只能是抽象方法。
默認(rèn)修飾符:public abstract
建議:自己手動(dòng)給出谐区。

所有的類都默認(rèn)繼承自一個(gè)類:Object湖蜕。
類 Object 是類層次結(jié)構(gòu)的根類。每個(gè)類都使用 Object 作為超類宋列。

classic coding:

interface Inter {
    public int num = 10;
    public final int num2 = 20;
    public static final int num3 = 30;
    
    //錯(cuò)誤: 需要<標(biāo)識(shí)符>
    //public Inter() {}
    
    //接口方法不能帶有主體
    //public void show() {}

    //abstract void show(); //默認(rèn)public
    public void show(); //默認(rèn)abstract
}

//接口名+Impl這種格式是接口的實(shí)現(xiàn)類格式
/*
class InterImpl implements Inter {
    public InterImpl() {
        super();
    }
}
*/

class InterImpl extends Object implements Inter {
    public InterImpl() {
        super();
    }
    
    public void show() {}
}

//測試類
class InterfaceDemo2 {
    public static void main(String[] args) {
        //創(chuàng)建對象
        Inter i = new InterImpl();
        System.out.println(i.num);
        System.out.println(i.num2);
        //i.num = 100;
        //i.num2 = 200;
        //System.out.println(i.num); //無法為最終變量num分配值
        //System.out.println(i.num2);//無法為最終變量num2分配值
        System.out.println(Inter.num);
        System.out.println(Inter.num2);
        System.out.println("--------------");
    }
}

抽象類和接口的區(qū)別:

A:成員區(qū)別
抽象類:
成員變量:可以變量昭抒,也可以常量
構(gòu)造方法:有
成員方法:可以抽象,也可以非抽象
接口:
成員變量:只可以常量
成員方法:只可以抽象

B:關(guān)系區(qū)別
類與類
繼承虚茶,單繼承
類與接口
實(shí)現(xiàn)戈鲁,單實(shí)現(xiàn),多實(shí)現(xiàn)
接口與接口
繼承嘹叫,單繼承婆殿,多繼承

C:設(shè)計(jì)理念區(qū)別
抽象類 被繼承體現(xiàn)的是:”is a”的關(guān)系。抽象類中定義的是該繼承體系的共性功能罩扇。
接口 被實(shí)現(xiàn)體現(xiàn)的是:”like a”的關(guān)系婆芦。接口中定義的是該繼承體系的擴(kuò)展功能。


總結(jié)

1:final關(guān)鍵字(掌握)
(1)是最終的意思喂饥,可以修飾類消约,方法,變量员帮。
(2)特點(diǎn):
A:它修飾的類或粮,不能被繼承。
B:它修飾的方法捞高,不能被重寫氯材。
C:它修飾的變量,是一個(gè)常量硝岗。
(3)面試相關(guān):
A:局部變量
a:基本類型 值不能發(fā)生改變
b:引用類型 地址值不能發(fā)生改變氢哮,但是對象的內(nèi)容是可以改變的
B:初始化時(shí)機(jī)
a:只能初始化一次。
b:常見的給值
定義的時(shí)候型檀。(推薦)
構(gòu)造方法中冗尤。

2:多態(tài)(掌握)
(1)同一個(gè)對象在不同時(shí)刻體現(xiàn)出來的不同狀態(tài)。
(2)多態(tài)的前提:
A:有繼承或者實(shí)現(xiàn)關(guān)系。
B:有方法重寫裂七。
C:有父類或者父接口引用指向子類對象皆看。

    多態(tài)的分類:
        a:具體類多態(tài)
            class Fu {}
            class Zi extends Fu {}
            
            Fu f = new Zi();
        b:抽象類多態(tài)
            abstract class Fu {}
            class Zi extends Fu {}
            
            Fu f = new Zi();
        c:接口多態(tài)
            interface Fu {}
            class Zi implements Fu {}
            
            Fu f = new Zi();
(3)多態(tài)中的成員訪問特點(diǎn)
    A:成員變量
        編譯看左邊,運(yùn)行看左邊
    B:構(gòu)造方法
        子類的構(gòu)造都會(huì)默認(rèn)訪問父類構(gòu)造
    C:成員方法
        編譯看左邊碍讯,運(yùn)行看右邊
    D:靜態(tài)方法
        編譯看左邊悬蔽,運(yùn)行看左邊
        
    為什么?
        因?yàn)槌蓡T方法有重寫。
(4)多態(tài)的好處:
    A:提高代碼的維護(hù)性(繼承體現(xiàn))
    B:提高代碼的擴(kuò)展性(多態(tài)體現(xiàn))
(5)多態(tài)的弊端:
    父不能使用子的特有功能捉兴。
    
    現(xiàn)象:
        子可以當(dāng)作父使用蝎困,父不能當(dāng)作子使用。
(6)多態(tài)中的轉(zhuǎn)型
    A:向上轉(zhuǎn)型
        從子到父
    B:向下轉(zhuǎn)型
        從父到子
(7)孔子裝爹的案例幫助大家理解多態(tài)
(8)多態(tài)的練習(xí)
    A:貓狗案例
    B:老師和學(xué)生案例

3:抽象類(掌握)
(1)把多個(gè)共性的東西提取到一個(gè)類中倍啥,這是繼承的做法禾乘。
但是呢,這多個(gè)共性的東西虽缕,在有些時(shí)候始藕,方法聲明一樣,但是方法體氮趋。
也就是說伍派,方法聲明一樣,但是每個(gè)具體的對象在具體實(shí)現(xiàn)的時(shí)候內(nèi)容不一樣剩胁。
所以诉植,我們在定義這些共性的方法的時(shí)候,就不能給出具體的方法體昵观。
而一個(gè)沒有具體的方法體的方法是抽象的方法晾腔。
在一個(gè)類中如果有抽象方法,該類必須定義為抽象類啊犬。
(2)抽象類的特點(diǎn)
A:抽象類和抽象方法必須用關(guān)鍵字abstract修飾
B:抽象類中不一定有抽象方法,但是有抽象方法的類一定是抽象類
C:抽象類不能實(shí)例化
D:抽象類的子類
a:是一個(gè)抽象類灼擂。
b:是一個(gè)具體類。這個(gè)類必須重寫抽象類中的所有抽象方法觉至。
(3)抽象類的成員特點(diǎn):
A:成員變量
有變量剔应,有常量
B:構(gòu)造方法
有構(gòu)造方法
C:成員方法
有抽象,有非抽象
(4)抽象類的練習(xí)
A:貓狗案例練習(xí)
B:老師案例練習(xí)
C:學(xué)生案例練習(xí)
D:員工案例練習(xí)
(5)抽象類的幾個(gè)小問題
A:抽象類有構(gòu)造方法语御,不能實(shí)例化峻贮,那么構(gòu)造方法有什么用?
用于子類訪問父類數(shù)據(jù)的初始化
B:一個(gè)類如果沒有抽象方法,卻定義為了抽象類,有什么用?
為了不讓創(chuàng)建對象
C:abstract不能和哪些關(guān)鍵字共存
a:final 沖突
b:private 沖突
c:static 無意義

4:接口(掌握)
(1)回顧貓狗案例沃暗,它們僅僅提供一些基本功能。
比如:貓鉆火圈何恶,狗跳高等功能孽锥,不是動(dòng)物本身就具備的,
是在后面的培養(yǎng)中訓(xùn)練出來的,這種額外的功能惜辑,java提供了接口表示唬涧。
(2)接口的特點(diǎn):
A:接口用關(guān)鍵字interface修飾
interface 接口名 {}
B:類實(shí)現(xiàn)接口用implements修飾
class 類名 implements 接口名 {}
C:接口不能實(shí)例化
D:接口的實(shí)現(xiàn)類
a:是一個(gè)抽象類。
b:是一個(gè)具體類盛撑,這個(gè)類必須重寫接口中的所有抽象方法碎节。
(3)接口的成員特點(diǎn):
A:成員變量
只能是常量
默認(rèn)修飾符:public static final
B:構(gòu)造方法
沒有構(gòu)造方法
C:成員方法
只能是抽象的
默認(rèn)修飾符:public abstract
(4)類與類,類與接口,接口與接口
A:類與類
繼承關(guān)系,只能單繼承抵卫,可以多層繼承
B:類與接口
實(shí)現(xiàn)關(guān)系狮荔,可以單實(shí)現(xiàn),也可以多實(shí)現(xiàn)介粘。
還可以在繼承一個(gè)類的同時(shí)殖氏,實(shí)現(xiàn)多個(gè)接口
C:接口與接口
繼承關(guān)系,可以單繼承姻采,也可以多繼承
(5)抽象類和接口的區(qū)別(自己補(bǔ)齊)?
A:成員區(qū)別
抽象類:
接口:
B:關(guān)系區(qū)別:
類與類:
類與接口:
接口與接口:
C:設(shè)計(jì)理念不同
抽象類:is a雅采,抽象類中定義的是共性功能。
接口:like a慨亲,接口中定義的是擴(kuò)展功能婚瓜。
(6)練習(xí):
A:貓狗案例,加入跳高功能
B:老師和學(xué)生案例刑棵,加入抽煙功能0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末巴刻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子铐望,更是在濱河造成了極大的恐慌冈涧,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件正蛙,死亡現(xiàn)場離奇詭異督弓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)乒验,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門愚隧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锻全,你說我怎么就攤上這事狂塘。” “怎么了鳄厌?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵荞胡,是天一觀的道長。 經(jīng)常有香客問我了嚎,道長泪漂,這世上最難降的妖魔是什么廊营? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮萝勤,結(jié)果婚禮上露筒,老公的妹妹穿的比我還像新娘。我一直安慰自己敌卓,他們只是感情好慎式,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著趟径,像睡著了一般瘪吏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上舵抹,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天肪虎,我揣著相機(jī)與錄音,去河邊找鬼惧蛹。 笑死扇救,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的香嗓。 我是一名探鬼主播迅腔,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼靠娱!你這毒婦竟也來了沧烈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤像云,失蹤者是張志新(化名)和其女友劉穎锌雀,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迅诬,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腋逆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侈贷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惩歉。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖俏蛮,靈堂內(nèi)的尸體忽然破棺而出撑蚌,到底是詐尸還是另有隱情,我是刑警寧澤搏屑,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布争涌,位于F島的核電站,受9級(jí)特大地震影響辣恋,放射性物質(zhì)發(fā)生泄漏亮垫。R本人自食惡果不足惜解幼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望包警。 院中可真熱鬧,春花似錦底靠、人聲如沸害晦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壹瘟。三九已至,卻和暖如春鳄逾,著一層夾襖步出監(jiān)牢的瞬間稻轨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工雕凹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留殴俱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓枚抵,卻偏偏與公主長得像线欲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子汽摹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容