繼承:
講學(xué)生和工人的共性描述提取出來(lái)嫩痰,單獨(dú)進(jìn)行描述拗踢。只要讓學(xué)生和工人與單獨(dú)描述的這個(gè)類有關(guān)系,就可以了。
1翻诉、提高了代碼的復(fù)用性。
2栅隐、讓類與類之間產(chǎn)生了關(guān)系辉懒。有了這個(gè)關(guān)系,才有了多態(tài)的特性钱烟。
3晰筛、注意:千萬(wàn)不要為了獲取其他類的功能,簡(jiǎn)化代碼而繼承拴袭。必須是類與類之間有所屬的關(guān)系才可以繼承读第。所屬關(guān)系isa
4、Java語(yǔ)言中拥刻,Java只支持單繼承怜瞒,不支持多繼承。因?yàn)槎嗬^承容易帶來(lái)安全隱患:當(dāng)多個(gè)父類中定義了相同的功能般哼,當(dāng)功能內(nèi)容不同時(shí)吴汪,子類對(duì)象不確定要運(yùn)行哪一個(gè)。
但是java保留這種機(jī)制蒸眠,并用另一種體現(xiàn)形式來(lái)完成表示(多實(shí)現(xiàn))
5漾橙、java支持多層繼承。也就是一個(gè)繼承體系
如何使用一個(gè)繼承體系中的功能呢楞卡?
想要使用體系霜运,先查閱體系父類的描述,蒋腮,因?yàn)楦割愔卸x的是該體系中共性功能淘捡,通過(guò)了解共性功能,就可以知道該體系的基本功能池摧。
那么這個(gè)體系已經(jīng)可以基本使用了案淋。
那么在具體調(diào)用時(shí),要?jiǎng)?chuàng)建最子類的對(duì)象险绘,為什么呢踢京?
因?yàn)橛锌赡芨割惒荒軇?chuàng)建對(duì)象
創(chuàng)建子類對(duì)象可以使用更多的功能,包括基本的也包括特有的
簡(jiǎn)單一句話:查閱父類功能宦棺,創(chuàng)建子類對(duì)象使用功能瓣距。
小編是一個(gè)有著5年工作經(jīng)驗(yàn)的java程序員,對(duì)于java代咸,自己有做資料的整合蹈丸,一個(gè)完整學(xué)習(xí)java的路線,學(xué)習(xí)資料和工具,相信這里有很多學(xué)習(xí)java的小伙伴逻杖,我創(chuàng)立了一個(gè)2000人學(xué)習(xí)扣群奋岁,479121291。每晚都有java的直播課程荸百。無(wú)論是初級(jí)還是進(jìn)階的小伙伴小編我都?xì)g迎闻伶!
6、子父類出現(xiàn)后够话,類成員的特點(diǎn):
類中成員:
變量蓝翰。
如果子類中出現(xiàn)非私有的同名成員變量時(shí),子類要訪問(wèn)本類中的變量女嘲,用this;訪問(wèn)父類中的同名變量用super畜份。
super的使用和this的使用幾乎一致。
this代表的是本類對(duì)象的引用欣尼;super代表的是父類對(duì)象的引用爆雹。
函數(shù)
當(dāng)子類出現(xiàn)和父類一模一樣的函數(shù)時(shí),當(dāng)子類對(duì)象調(diào)用
該函數(shù)愕鼓,會(huì)運(yùn)行子類函數(shù)的內(nèi)容顶别。如同父類的函數(shù)被覆蓋
一樣。
這種情況是函數(shù)的另一個(gè)特性:重寫(覆蓋)】
當(dāng)子類繼承父類拒啰,沿襲了父類的功能驯绎,到子類中,但
是子類雖具備該功能谋旦,但是功能的內(nèi)容卻和父類的不一致
這時(shí)剩失,沒(méi)有必要定義新功能,而是使用覆蓋特性册着,保留父
類的功能定義拴孤,并重寫功能的內(nèi)容。
覆蓋(重寫)注意事項(xiàng):
子類覆蓋父類甲捏,必須保證子類權(quán)限大于等于父類權(quán)限演熟,
才可以覆蓋,否則編譯失敗司顿。
靜態(tài)只能覆蓋靜態(tài)芒粹。
重載:只看同名函數(shù)的參數(shù)列表。
重寫:子父類方法要一模一樣大溜。
構(gòu)造函數(shù)
在對(duì)子類對(duì)象進(jìn)行初始化時(shí)化漆,父類的構(gòu)造函數(shù)也會(huì)運(yùn)行,
那是因?yàn)樽宇惖臉?gòu)造函數(shù)默認(rèn)第一行有一條隱式的語(yǔ)句
super()钦奋。
super():會(huì)訪問(wèn)父類中的空參數(shù)構(gòu)造函數(shù)座云。而且子類中所有
的構(gòu)造函數(shù)默認(rèn)第一行都是super()疙赠。
為什么子類一定要訪問(wèn)父類中的構(gòu)造函數(shù)?
因?yàn)楦割愔械臄?shù)據(jù)子類可以直接獲取朦拖。所以子類對(duì)象在建立
時(shí)需要先查看父類是如何對(duì)這些數(shù)據(jù)進(jìn)行初始化的圃阳,所以子類
在對(duì)象初始化時(shí)要先訪問(wèn)一下父類中的構(gòu)造函數(shù)。
如果要訪問(wèn)父類中指定的構(gòu)造函數(shù)璧帝,可以通過(guò)手動(dòng)定義
Super語(yǔ)句的方式來(lái)指定捍岳。
注意:super語(yǔ)句一定定義在子類構(gòu)造函數(shù)的第一行。
子類的實(shí)例化過(guò)程:
結(jié)論:子類的所有構(gòu)造函數(shù)裸弦,默認(rèn)都會(huì)訪問(wèn)父類中的空參
數(shù)構(gòu)造函數(shù);因?yàn)樽宇愔忻恳粋€(gè)構(gòu)造函數(shù)內(nèi)的第一行都有一
個(gè)隱式的super();
當(dāng)父類中沒(méi)有空參數(shù)的構(gòu)造函數(shù)時(shí)作喘,子類必須手動(dòng)通過(guò)super
語(yǔ)句的形式來(lái)指定要訪問(wèn)父類中的構(gòu)造函數(shù)理疙。
當(dāng)然:子類的構(gòu)造函數(shù)第一行也可以手動(dòng)指定this語(yǔ)句來(lái)訪
問(wèn)本類構(gòu)造函數(shù);子類中至少有一個(gè)構(gòu)造函數(shù)會(huì)訪問(wèn)父類中的
構(gòu)造函數(shù)泞坦。
final
作為一個(gè)修飾符
1窖贤、可以修飾類、函數(shù)贰锁、變量赃梧。
2、被final修飾的類不可以被繼承豌熄。是為了避免被繼承授嘀,被子類復(fù)寫的功能。
3锣险、被final修飾的方法不可以被重寫蹄皱。
4、被final修飾的變量是一個(gè)常量芯肤,只能賦值一次巷折,既可以修飾成員變量,也可以修飾局部變量崖咨。
當(dāng)在描述事物時(shí)锻拘,一些數(shù)據(jù)的出現(xiàn)值是固定的,那么這是為了增強(qiáng)閱讀性击蹲,都給這些值起個(gè)名字署拟,方便于閱讀。而這個(gè)值不需要改變歌豺,所以加上final修飾芯丧。作為常量:常量的書寫規(guī)范所有字母都大寫,如果由多個(gè)單詞組成世曾,單詞間通過(guò)_連接缨恒。
5谴咸、內(nèi)部類定義在類中的局部位置上時(shí),只能訪問(wèn)該局部被final修飾的局部變量骗露。
抽象
1岭佳、抽象類的特點(diǎn):
抽象方法一定在抽象類中
抽象方法和抽象類都必須被abstract關(guān)鍵字修飾
抽象類不可以用new創(chuàng)建對(duì)象,因?yàn)檎{(diào)用抽象方法沒(méi)意義
抽象類中的抽象方法要被使用萧锉,必須由子類復(fù)寫起所有的抽象方法后珊随,建立子類對(duì)象調(diào)用;如果子類只覆蓋了部分的抽象方法柿隙,那么該子類還是一個(gè)抽象類叶洞。
抽象類中可以有抽象方法也可以有非抽象方法
抽象類和一般類沒(méi)有太大的不同:該如何描述事物,就如何描述事物禀崖,只不過(guò)衩辟,該事物出現(xiàn)了一些看不懂得東西。這些不確定的部分波附,也是該事物的功能艺晴,需要明確出現(xiàn)。但是無(wú)法定義主體
抽象類比一般類多了個(gè)抽象函數(shù)掸屡,就是在類中可以定義抽象方法;抽象類不可以實(shí)例化封寞。
特殊:抽象類中可以不定義抽象方法,這樣做僅僅是不讓改類建立對(duì)象仅财。
模板方法:
在定義功能時(shí)狈究,功能的一部分是確定的,但是有一部分是不確定的盏求,而確定的部分在使用不確定的部分谦炒,那么這時(shí)就將不確定的部分暴露出去。有該類的子類去實(shí)現(xiàn)风喇。
接口
初期理解:可以認(rèn)為是一個(gè)特殊的抽象類宁改,當(dāng)抽象類中的方法都是抽象的,那么該類可以通過(guò)接口的形式來(lái)表示(interface)
接口定義時(shí)魂莫,格式特點(diǎn):
1还蹲、接口中常見(jiàn)定義:常量,抽象方法耙考。
2谜喊、接口中的成員都有固定修飾符。
常量:publicstaticfinal
方法:publicabstract
記拙胧肌:接口中的成員都是public的斗遏。
3、接口是不可以創(chuàng)建對(duì)象的鞋邑,因?yàn)橛谐橄蠓椒ㄋ写巍P枰蛔宇悓?shí)現(xiàn)账蓉,子類對(duì)接口中的抽象方法全部覆蓋后,子類才可以實(shí)例化逾一。否則子類是一個(gè)抽象類铸本。
4、接口可以被類多實(shí)現(xiàn)遵堵,也是對(duì)多繼承不支持的轉(zhuǎn)換形式箱玷,Java支持多實(shí)現(xiàn)。