繼承與抽象類

繼承

在代碼中,如果一個類通過extends關(guān)鍵字繼承了其他類,那么這個類是其他類的子類,其他類是這個類的父類。

? 一個類想要繼承其他類,那么這個類與被繼承的類之間必須要確實具備有繼承關(guān)系,不止要遵循語法邏輯,還要符合生活邏輯。

class Plant {

System.out.println();

}

class Dog extends Plant {}

比方說? 讓狗類去繼承植物類,語法上沒有問題,但是不符合生活邏輯。

繼承的應(yīng)用場景:

? 當(dāng)多個類中都具備相同的屬性或功能時,可以將他們之間相同的屬性和功能提取出來放入一個共性類中,并讓其他類繼承這個類。

? 比如學(xué)生類、老師類、工人類、他們之間相同的屬性和功能都可以在? 人? 這個共性類中找到。所以可以把 姓名 年齡 身高體重這些相同的屬性,還有吃飯睡覺等等這些共性行為都放入到 人 這個共性類中,讓其他幾個類來繼承,然后個各類中加入他們特有的屬性和行為就可以了。

? 這樣做的好處是提高代碼的復(fù)用性,讓類與類之間產(chǎn)生了關(guān)系,給多態(tài)的產(chǎn)生提供了前提。 (父類的引用指向子類的對象)

在Java中,允許單繼承。(不直接允許多繼承)

? 單繼承即一個子類只能繼承一個父類。如果繼承多個父類,當(dāng)父類中有同名方法時,調(diào)用可能會產(chǎn)生不確定性。

繼承在使用時的特點:

1、在創(chuàng)建子類對象時,會首先自動調(diào)用父類的構(gòu)造方法。這里是為了初始化父類的成員變量,來方便子類使用。(子類所有的構(gòu)造函數(shù)都會去訪問父類中的默認(rèn)空參構(gòu)造函數(shù),因為子類的構(gòu)造函數(shù)第一行都有一個隱式的super();)

2、父類中的非私有化成員變量和成員方法,子類在繼承之后可以獲得使用權(quán)。

3、在父類中用private修飾的? 私有化成員變量和私有化成員方法不能通過該類的子類對象調(diào)用。

? ? 私有化的成員變量和成員方法只能在當(dāng)前類的內(nèi)部使用,外部沒有使用權(quán)限。

super關(guān)鍵字

1、super關(guān)鍵字可以在子類中直接調(diào)用父類的成員方法。

2、當(dāng)父類中沒有定義空參構(gòu)造函數(shù)時,使用:super(實際參數(shù))? Java編譯器會根據(jù)不同的參數(shù)類型調(diào)用不同的構(gòu)造方法

3、this()或者super()只能定義在構(gòu)造函數(shù)的第一行,因為初始化動作要先執(zhí)行。this();和super();不能同時出現(xiàn)在一個代碼里

4、在子類的構(gòu)造函數(shù)中如果沒有通過super指定調(diào)用父類的構(gòu)造方法,那么編譯器會自動調(diào)用父類的無參構(gòu)造函數(shù)(隱式super();)? 所以建議在繼承關(guān)系中,父類中最好提供一個無參構(gòu)造函數(shù)。

this回顧

this關(guān)鍵字調(diào)用構(gòu)造函數(shù)的方法:

1、this(實際參數(shù)),Java編譯器會根據(jù)不同的參數(shù)類型調(diào)用不同的構(gòu)造方法。

2、如果用this關(guān)鍵字調(diào)用構(gòu)造方法,必須在當(dāng)前代碼塊的第一行。否則執(zhí)行的是第一行的隱式super();

3、this關(guān)鍵字調(diào)用構(gòu)造方法時不能相互調(diào)用。

方法的重寫

? ? 當(dāng)子類繼承父類時,繼承而來的方法可能并不適合子類的實際情況,這個時候為了讓繼承而來的方法更加適合子類的實際情況,可以選擇重寫這個方法。

定義:

? ? 當(dāng)子類中存在和父類同名、同參、同返回值類型的方法,這種情況稱之為方法的【重寫】

? ? 方法的【重載】是在同一個類中,方法的方法名相同,參數(shù)不同、參數(shù)個數(shù)不同或者返回值類型不同。它的作用是為了減少代碼復(fù)雜度(函數(shù)名)。

? ? 在重寫方法時,為了保證代碼的嚴(yán)謹(jǐn)性,通常會開啟嚴(yán)格的重寫檢查 @override,將邏輯問題上升到語法問題,強制重寫這個方法,不寫就報錯,目的是錯誤前置(將運行時異常前置為編譯時異常)。這個時候就會用到一個關(guān)鍵字abstract。

abstract關(guān)鍵字的特點

1、如果一個方法用abstract修飾,那么這個方法是不能有方法體的,這個稱之為【方法的聲明】。? 所謂方法體就是{}以及里面的內(nèi)容。

2、如果一個方法用abstract修飾,要求繼承該類的子類必須重寫這個方法。

3、如果一類中存在用abstract修飾的方法,那么這個類也必須用abstract修飾。這個類也稱之為抽象類。

抽象類

抽象類沒有自己的類對象

在用abstract修飾的抽象類中,有可能存在抽象方法,而抽象方法是沒有方法體的,不能確定會運行什么代碼,而創(chuàng)建抽象類對象之后就會存在這樣的隱患。所以抽象類沒有自己的類對象。

如果一個類繼承了用abstract修飾的抽象類,那么要求該類必須實現(xiàn)抽象類中的【所有方法】。

abstract關(guān)鍵字不和哪些關(guān)鍵字共存

1、final? ? :final修飾的類能再派生子類。

2、private? :私有以后子類無法繼承父類。

3、static? :靜態(tài)可以直接被類名調(diào)用。

回顧一下final

final是一個修飾符,它可以修飾類、方法、變量(成員/局部變量)

特點:

1、final修飾的類是一個最終類,不能再派生子類。

2、final修飾的方法是最終方法,不能被重寫。

3、final修飾的變量是一個常量,只能被賦值一次。

被final修飾的常量名應(yīng)該大寫,用_連接。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,638評論 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,806評論 0 11
  • 一、繼承 當(dāng)兩個事物之間存在一定的所屬關(guān)系,即就像孩子從父母那里得到遺傳基因一樣,當(dāng)然,java要遺傳的更完美,這...
    玉圣閱讀 1,115評論 0 2
  • 一、繼承 概述繼承是面向?qū)ο蟮闹匾卣髦?,?dāng)多個類中存在相同的屬性和行為時,將這些內(nèi)容抽取到單獨一個類中,那多個...
    java部落閱讀 1,022評論 0 0
  • 老房子像個滿經(jīng)風(fēng)霜的老人,天一下雨,所有的舊疾便復(fù)發(fā)出來 但只有等到漏水,你才知道,有哪些地方喜歡偷偷哭泣
    Mist1996閱讀 308評論 0 0

友情鏈接更多精彩內(nèi)容