Java面向?qū)ο笾^承的概念詳解
1. 繼承
1.1 繼承的實(shí)現(xiàn)
- 繼承的概念
繼承是面向?qū)ο笕筇卣髦唬梢允沟米宇惥哂懈割惖膶傩院头椒?,還可以在子類中重新定義,以及追加屬性和方法
- 實(shí)現(xiàn)繼承的格式
繼承通過extends實(shí)現(xiàn)格式:class 子類 extends 父類 { } 舉例:class Dog extends Animal { }
- 繼承帶來的好處
繼承可以讓類與類之間產(chǎn)生關(guān)系,子父類關(guān)系,產(chǎn)生子父類后,子類則可以使用父類中非私有的成員。
- 示例代碼
public class Fu {
public void show() {
System.out.println("show方法被調(diào)用");
}
}
public class Zi extends Fu {
public void method() {
System.out.println("method方法被調(diào)用");
}
}
public class Demo {
public static void main(String[] args) {
//創(chuàng)建對象,調(diào)用方法
Fu f = new Fu();
f.show();
Zi z = new Zi();
z.method();
z.show();
}
}
1.2 繼承的好處和弊端
- 繼承好處
- 提高了代碼的復(fù)用性(多個類相同的成員可以放到同一個類中)
- 提高了代碼的維護(hù)性(如果方法的代碼需要修改,修改一處即可)
- 繼承弊端
- 繼承讓類與類之間產(chǎn)生了關(guān)系,類的耦合性增強(qiáng)了,當(dāng)父類發(fā)生變化時子類實(shí)現(xiàn)也不得不跟著變化,削弱了子類的獨(dú)立性
- 繼承的應(yīng)用場景:
- 使用繼承,需要考慮類與類之間是否存在is…a的關(guān)系,不能盲目使用繼承
- is…a的關(guān)系:誰是誰的一種,例如:老師和學(xué)生是人的一種,那人就是父類,學(xué)生和老師就是子類
- 使用繼承,需要考慮類與類之間是否存在is…a的關(guān)系,不能盲目使用繼承
1.3. Java中繼承的特點(diǎn)
- Java中繼承的特點(diǎn)
- Java中類只支持單繼承,不支持多繼承
- 錯誤范例:class A extends B, C { }
- Java中類支持多層繼承
- 多層繼承示例代碼:
public class Granddad {
public void drink() {
System.out.println("爺爺愛喝酒");
}
}
public class Father extends Granddad {
public void smoke() {
System.out.println("爸爸愛抽煙");
}
}
public class Mother {
public void dance() {
System.out.println("媽媽愛跳舞");
}
}
public class Son extends Father {
// 此時,Son類中就同時擁有drink方法以及smoke方法
}
2. 繼承中的成員訪問特點(diǎn)
2.1 繼承中變量的訪問特點(diǎn)
在子類方法中訪問一個變量,采用的是就近原則。
- 子類局部范圍找
- 子類成員范圍找
- 父類成員范圍找
- 如果都沒有就報錯(不考慮父親的父親…)
示例代碼
class Fu {
int num = 10;
}
class Zi {
int num = 20;
public void show(){
int num = 30;
System.out.println(num);
}
}
public class Demo1 {
public static void main(String[] args) {
Zi z = new Zi();
z.show(); // 輸出show方法中的局部變量30
}
}
2.2 super
this&super關(guān)鍵字:
- this:代表本類對象的引用
- super:代表父類存儲空間的標(biāo)識(可以理解為父類對象引用)
- this和super的使用分別
- 成員變量:
- this.成員變量 - 訪問本類成員變量
- super.成員變量 - 訪問父類成員變量
- 成員方法:
- this.成員方法 - 訪問本類成員方法
- super.成員方法 - 訪問父類成員方法
- 構(gòu)造方法:
- this(…) - 訪問本類構(gòu)造方法
- super(…) - 訪問父類構(gòu)造方法
- 成員變量:
2.3 方法重寫
1、方法重寫概念 子類出現(xiàn)了和父類中一模一樣的方法聲明(方法名一樣,參數(shù)列表也必須一樣)
2、方法重寫的應(yīng)用場景 當(dāng)子類需要父類的功能,而功能主體子類有自己特有內(nèi)容時,可以重寫父類中的方法,這樣,即沿襲了父類的功能,又定義了子類特有的內(nèi)容
3、Override注解 用來檢測當(dāng)前的方法,是否是重寫的方法,起到【校驗(yàn)】的作用
2.4 方法重寫的注意事項(xiàng)
方法重寫的注意事項(xiàng)
- 私有方法不能被重寫(父類私有成員子類是不能繼承的)
- 子類方法訪問權(quán)限不能更低(public > 默認(rèn) > 私有)
- 靜態(tài)方法不能被重寫,如果子類也有相同的方法,并不是重寫的父類的方法
示例代碼
public class Fu {
private void show() {
System.out.println("Fu中show()方法被調(diào)用");
}
void method() {
System.out.println("Fu中method()方法被調(diào)用");
}
}
public class Zi extends Fu {
/* 編譯【出錯】,子類不能重寫父類私有的方法*/
@Override
private void show() {
System.out.println("Zi中show()方法被調(diào)用");
}
/* 編譯【出錯】,子類重寫父類方法的時候,訪問權(quán)限需要大于等于父類 */
@Override
private void method() {
System.out.println("Zi中method()方法被調(diào)用");
}
/* 編譯【通過】,子類重寫父類方法的時候,訪問權(quán)限需要大于等于父類 */
@Override
public void method() {
System.out.println("Zi中method()方法被調(diào)用");
}
}
到此這篇關(guān)于Java面向?qū)ο笾^承的概念詳解的文章就介紹到這了,更多相關(guān)Java面向?qū)ο蟮睦^承內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java獲取http和https協(xié)議返回的json數(shù)據(jù)
本篇文章主要介紹了Java獲取http和https協(xié)議返回的json數(shù)據(jù) ,本篇文章提供兩個方法,幫助各位如何獲取http和https返回的數(shù)據(jù)。有興趣的可以了解一下。2017-01-01
mybatis-plus插入一條數(shù)據(jù),獲取插入數(shù)據(jù)自動生成的主鍵問題
這篇文章主要介紹了mybatis-plus插入一條數(shù)據(jù),獲取插入數(shù)據(jù)自動生成的主鍵問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
SpringBoot常用注解@RestControllerAdvice詳解
這篇文章主要介紹了SpringBoot常用注解@RestControllerAdvice詳解,@RestControllerAdvice是一個組合注解,由@ControllerAdvice、@ResponseBody組成,而@ControllerAdvice繼承了@Component,因此@RestControllerAdvice本質(zhì)上是個Component,需要的朋友可以參考下2024-01-01
Java二維碼登錄流程實(shí)現(xiàn)代碼(包含短地址生成,含部分代碼)
近年來,二維碼的使用越來越風(fēng)生水起,本篇文章主要介紹了Java二維碼登錄流程實(shí)現(xiàn)代碼,其中包含短地址生成,有興趣的可以了解一下。2016-12-12
Spring實(shí)戰(zhàn)之Bean的作用域singleton和prototype用法分析
這篇文章主要介紹了Spring實(shí)戰(zhàn)之Bean的作用域singleton和prototype用法,結(jié)合實(shí)例形式分析了Bean的作用域singleton和prototype相關(guān)使用方法及操作注意事項(xiàng),需要的朋友可以參考下2019-11-11
Spring+SpringMVC+MyBatis深入學(xué)習(xí)及搭建(三)之MyBatis全局配置文件解析
這篇文章主要介紹了Spring+SpringMVC+MyBatis深入學(xué)習(xí)及搭建(三)之MyBatis全局配置文件解析,需要的朋友可以參考下2017-05-05
Feign如何實(shí)現(xiàn)第三方的HTTP請求
這篇文章主要介紹了Feign如何實(shí)現(xiàn)第三方的HTTP請求,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10
IDEA-SpringBoot項(xiàng)目Debug啟動不了(卡住不動)的原因分析
這篇文章主要介紹了IDEA-SpringBoot項(xiàng)目Debug啟動不了(卡住不動)的原因分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11

