国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

黑馬程序員_Java面向?qū)ο?_繼承

2019-11-14 23:59:09
字體:
供稿:網(wǎng)友
黑馬程序員_java面向?qū)ο?_繼承4.面向?qū)ο骭繼承4.1繼承的概述
  1. 提高了代碼的復(fù)用性。
  2. 讓類與類之間產(chǎn)生了關(guān)系,有了這個關(guān)系,才有多態(tài)的特性。

注意:千萬不要為了獲取其他類的功能而去繼承,簡化代碼而繼承。必須是類與類之間有所屬關(guān)系才可以繼承,所屬關(guān)系 is a 。

Java語言中:Java只支持單繼承,不支持多繼承。因為多繼承容易帶來安全隱患。但多個父類定義了相同的功能時,當(dāng)功能內(nèi)容不同時,子類對象不確定實現(xiàn)哪一個。

但是Java保留這種機制,并用類一種體現(xiàn)形式來完成表現(xiàn),多實現(xiàn)。Java支持多層繼承。也就是一個繼承體系。

如何使用一個體系中的功能呢?想要使用體系,先查閱體系父類的描述,因為父類中定義的是體系中最共性的功能,通過了解共性功能,就可以知道該體系的基本功能。那么這個體系已經(jīng)基本可以使用了。

那么在具體調(diào)用時,要創(chuàng)建最子類的對象,為什么呢?一是因為有可能父類不能創(chuàng)建對象,二是因為創(chuàng)建子類對象可以獲取更多功能,包括基本的也包括特有的。

簡單一句話:查閱父類功能,創(chuàng)建子類對象,使用功能。

4.2繼承的特點

子父類出現(xiàn)后:類成員的特點

  1. 變量
  2. 函數(shù)
  3. 構(gòu)造函數(shù)
4.3super關(guān)鍵字

1、子父類中的變量:如果子父類中出現(xiàn)非私有的同名成員變量時,子類要訪問本類的變量,用this;子類要訪問父類中的同名變量時,用super。

super的使用和this的使用幾乎一致。this代表的是本類對象的引用,super代表的是父類的引用。

4.4函數(shù)覆蓋

2、子父類中的函數(shù):當(dāng)子類出現(xiàn)和父類一模一樣的函數(shù)時,當(dāng)子類對象調(diào)用該函數(shù),會運行子類函數(shù)的內(nèi)容。如同父類的函數(shù)被覆蓋和一樣。這種情況是函數(shù)的另一個特性:重寫(覆蓋)

當(dāng)子類繼承父類,沿襲了父類的功能到子類中,但是子類雖然具備該功能,但是功能內(nèi)部的內(nèi)容卻不一致,這是沒有必要定義新功能,而是使用覆蓋特性,保留父類的功能定義,并重寫功能的內(nèi)容。

覆蓋:1、子類覆蓋父類,必須保證子類權(quán)限大于等于父類權(quán)限,才可以覆蓋,否則編譯失敗。2、靜態(tài)只能覆蓋靜態(tài)。

注意:重載:只看同名函數(shù)的參數(shù)列表。重寫:子父類方法要一模一樣。包括返回值類型。

4.5子類的實例化過程

3、子父類中的構(gòu)造函數(shù):在對子類對象進行初始化時,父類的構(gòu)造函數(shù)也會運行,那是因為子類的構(gòu)造函數(shù)默認第一行有一條隱式的語句super();

super();會訪問父類中空參數(shù)的構(gòu)造函數(shù),而且子類中所有的構(gòu)造函數(shù)默認第一行都是super();

為什么子類一定要訪問父類中的構(gòu)造函數(shù)?因為父類中的數(shù)據(jù)子類可以直接獲取,所以子類對象在建立時,需要先查看父類中對這些數(shù)據(jù)是如何進行初始化的。所以子類在對象初始化時,要先訪問一下父類中的構(gòu)造函數(shù)。如果要訪問父類中指定的構(gòu)造函數(shù),可以通過手動定義super語句的方式來指定。

注意:super 語句一定定義在子類構(gòu)造函數(shù)的第一行。

結(jié)論:子類中所有的構(gòu)造函數(shù),默認都會訪問父類中空參數(shù)的構(gòu)造函數(shù)。因為子類每一個構(gòu)造函數(shù)內(nèi)都有一條隱式的語句super();,當(dāng)父類中沒有空參數(shù)的構(gòu)造函數(shù)時,子類必須手動通過super語句形式來指定要訪問父類中的構(gòu)造函數(shù)。當(dāng)然:子類的構(gòu)造函數(shù)第一行也可以手動指定this語句來訪問本類中的構(gòu)造函數(shù)。子類中最少有一個構(gòu)造函數(shù)會訪問父類中的構(gòu)造函數(shù),在子類構(gòu)造函數(shù)中this語句和super語句只能存在一個

4.6final關(guān)鍵字
  • final可以修飾類、方法、變量
  • final修飾的類不可以被繼承(限制全部),為了避免被繼承,被子類復(fù)寫功能。
  • final修飾的方法不可以被覆蓋(限制局部),既可以修飾成員變量也可以修飾局部變量。
  • final修飾的變量是一個常量,只能被賦值一次。(當(dāng)描述事物時,一些數(shù)據(jù)的出現(xiàn)值是固定的,那么這時為了增強閱讀性,都給這些值起個名字,方便于閱讀,而這個值不需要改變,所以加上final修飾。作為常量:常量的書寫規(guī)范所有的字母都要大寫,如果由多個單詞組成,單詞間通過下劃線_連接。)
  • 內(nèi)部類只能訪問被final修飾的局部變量
4.7 抽象類

當(dāng)多個類中出現(xiàn)相同功能,但是功能主體不同,可以進行向上抽取。這時只抽取功能定義,而不抽取功能主體。抽象:看不懂。

抽象類的特點:

  1. 抽象方法一定在抽象類中;
  2. 抽象方法和抽象類都必須被abstract關(guān)鍵字修飾;
  3. 抽象類不可以用new創(chuàng)建對象,因為調(diào)用抽象方法沒意義。
  4. 抽象類中的方法要被使用,必須由子類復(fù)寫其所有的抽象方法后,建立子類對象調(diào)用。如果子類只覆蓋了部分抽象方法,那么該子類還是一個抽象類。

抽象類和一般類沒有太大的不同。該如何描述事物,就如何描述事物。只不過該事物出現(xiàn)了一些看不懂的東西。這些不確定的部分,也是該事物的功能,也需明確出現(xiàn)。但是無法定義功能主體。通過抽象方法來體現(xiàn)。

抽象類比一般類多了抽象方法。抽象不可以實例化。特殊:抽象類可以不定義抽象方法(目的:不讓該類建立對象)。

模板方法模式:在定義功能時,功能的一部分是確定的(不想被子類復(fù)寫用final修飾),但是有一部分是不確定的(當(dāng)事物有默認的實現(xiàn)時,不一定用abstract修飾)。而確定的部分在使用不確定的部分,那么這時就將不確定的部分暴露出去,由該類的子類去完成。

4.8 接口4.8.1接口的表現(xiàn)形式與類的關(guān)系
  • 格式:interface{}
  • 接口中的成員修飾符是固定的。
    • 成員變量:public static final
    • 成員函數(shù):public abstract
  • 接口的出現(xiàn)將“多繼承”通過另一種形式體現(xiàn)出來,即“多實現(xiàn)”。

接口:是不可以創(chuàng)建對象的,因為有抽象方法。需要被子類實現(xiàn),子類對接口中的抽象方法全部覆蓋后,子類才可以實例化。否則子類也是一個抽象類。接口可以被類多實現(xiàn),也是對多繼承不支持的轉(zhuǎn)換形式。Java支持多實現(xiàn)。

一個類繼承了另一個類的同時還能實現(xiàn)多個接口。接口與接口之間存在多繼承,類與類之間只支持單繼承,類與接口之間存在多實現(xiàn)。

4.8.2接口的特點
  • 接口是對外暴露的規(guī)則
  • 接口是程序的功能擴展
  • 接口可以用來多實現(xiàn)
  • 接口于類之間是實現(xiàn)關(guān)系,而且類可以繼承一個類的同時還能實現(xiàn)多個接口
  • 接口與接口之間可以有繼承關(guān)系


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 托克逊县| 绥德县| 曲周县| 恭城| 万山特区| 韶关市| 阿荣旗| 姜堰市| 和政县| 南漳县| 荣成市| 潍坊市| 浦江县| 崇明县| 上高县| 滦平县| 安龙县| 大冶市| 平乡县| 信丰县| 新营市| 汝州市| 法库县| 宜宾县| 新沂市| 鹤山市| 石阡县| 读书| 镇赉县| 溆浦县| 鹤峰县| 苍溪县| 西吉县| 秦安县| 金秀| 富民县| 望奎县| 台湾省| 南康市| 南木林县| 自贡市|