面對物件三大特征繼承、多型
- 繼承
- 1.繼承的概念:
- 2.繼承的實作:
- 3.繼承的好處與弊端:
- 4.super
- 5.繼承中的成員訪問特點以及訪問修飾符:
- JAVA中的訪問修飾符
- 6.方法重寫以及繼承的注意事項:
- 多型
- 1.多型的概念
- 2.多型中成員訪問特點
- 3.多型的好處和弊端
- 4.多型中的轉型
??關于JAVA面對物件的三大特征,在之前的博客, 我們已經介紹了封裝, 在這里我們將接下來介紹繼承和多型,歡迎大家一起探討、學習,
繼承
在之前我們也介紹了它的概念, 接下來我們復習一下,
1.繼承的概念:
??繼承是指這樣一種能力:它可以使用現有類的所有功能,并在無需重新撰寫原來的類的情況下對這些功能進行擴展,簡單而言,共性放到父類,特性放到子類;父類 --> 子類 --> 一般
- 繼承得到的新類稱為“子類”或“派生類”,被繼承的父類稱為“基類”、“父類”或“超類”,
- 繼承的程序是一個從一般到特殊的的程序,
- 繼承概念的實作方式有二類:實作繼承與介面繼承,實作繼承是指直接使用基類的屬性和方法而無需額外編碼的能力;介面繼承是指僅使用屬性和方法的名稱、但是子類必須提供實作的能力,
2.繼承的實作:
使用關鍵字 : extends 實作繼承
格式 class 子類 extends 父類{ }
class Zi extends FU{
........
}
??繼承帶來的好處 : 繼承可以讓類與類之間產生關系,子父類關系,產生子父類后,子類則可以使用父類中非私有的成員,
3.繼承的好處與弊端:
繼承好處 :
??a .提高了代碼的復用性(多個類相同的成員可以放到同一個類中)
??b .提高了代碼的維護性(如果方法的代碼需要修改,修改一處即可)
繼承弊端 :
??繼承讓類與類之間產生了關系,類的耦合性增強了,當父類發生變化時子
??實作也不得不跟著變化,削弱了子類的獨立性
繼承的應用場景:
??使用繼承,需要考慮類與類之間是否存在is…a的關系,不能盲目使用繼承
??is…a的關系:誰是誰的一種,例如:老師和學生是人的一種,那人就是父類,學生和老師就是子類
4.super
- this&super關鍵字:
- this:代表本類物件的參考
- super:代表父類存盤空間的標識(可以理解為父類物件參考)
- this和super的使用分別 :
- 成員變數:
- this.成員變數 - 訪問本類成員變數
- super.成員變數 - 訪問父類成員變數
- 成員方法:
- this.成員方法 - 訪問本類成員方法
- super.成員方法 - 訪問父類成員方法
- 成員變數:
- 構造方法:
- this(…) - 訪問本類構造方法
- super(…) - 訪問父類構造方法
5.繼承中的成員訪問特點以及訪問修飾符:
構造方法的訪問特點:
??子類會繼承父類中的資料,可能還會使用父類的資料,所以,子類初始化之前,一定要先完成父類資料的初始化,原因在于,每一個子類構造方法的第一條陳述句默認都是:super()
注意:
??在寫類的時候,一定要寫默認無參的構造方法,如果一個構造方法的第一句既不是this(),也不是super()時,那么就會在這里隱含的呼叫他的父類的無參的構造方法,即隱含的有super(),
JAVA中的訪問修飾符
| 訪問修飾符 | 訪問權限 | 繼承 |
|---|---|---|
| priavte | 本類 | 不能繼承 |
| default | 本類+同包 | 同包子類可以繼承 |
| protected | 本類+同包+不同子包 | 可以繼承 |
| public | 公開 | 可以繼承 |
成員方法的訪問特點:
通過子類物件訪問一個方法
- 子類成員范圍找
- 父類成員范圍找
- 如果都沒有就報錯(不考慮父親的父親…)
6.方法重寫以及繼承的注意事項:
方法重寫:
1、方法重寫概念
- 子類出現了和父類中一模一樣的方法宣告(方法名一樣,引數串列也必須一樣)
2、方法重寫的應用場景
- 當子類需要父類的功能,而功能主體子類有自己特有內容時,可以重寫父類中的方法,這樣,即沿襲了父類的功能,又定義了子類特有的內容
3、Override注解
- 用來檢測當前的方法,是否是重寫的方法,起到【校驗】的作用
方法重寫的注意事項
- 私有方法不能被重寫(父類私有成員子類是不能繼承的)
- 子類方法訪問權限不能更低(public>私有>默認)
例如代碼:
public class Fu {
private void show() {
System.out.println("Fu中show()方法被呼叫");
}
void method() {
System.out.println("Fu中method()方法被呼叫");
}
}
public class Zi extends Fu {
/* 編譯【出錯】,子類不能重寫父類私有的方法*/
@Override
private void show() {
System.out.println("Zi中show()方法被呼叫");
}
/* 編譯【出錯】,子類重寫父類方法的時候,訪問權限需要大于等于父類 */
@Override
private void method() {
System.out.println("Zi中method()方法被呼叫");
}
/* 編譯【通過】,子類重寫父類方法的時候,訪問權限需要大于等于父類 */
@Override
public void method() {
System.out.println("Zi中method()方法被呼叫");
}
}
繼承中的注意事項:
- 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方法
}
多型
1.多型的概念
-
什么是多型
? 同一個物件,在不同時刻表現出來的不同形態
-
多型的前提
- 要有繼承或實作關系
- 要有方法的重寫
- 要有父類參考指向子類物件
2.多型中成員訪問特點
成員訪問特點
- 成員變數 :
? 編譯看父類,運行看父類 - 成員方法 :
? 編譯看父類,運行看子類
代碼演示:
??動物類
xpublic class Animal {
public int age = 40;
?public void eat() {
System.out.println("動物吃東西");
}
}
??貓類
public class Cat extends Animal {
public int age = 20;
public int weight = 10;
@Override
public void eat() {
System.out.println("貓吃魚");
}
public void playGame() {
System.out.println("貓捉迷藏");
}
}
??測驗類
public class AnimalDemo {
public static void main(String[] args) {
//有父類參考指向子類物件
Animal a = new Cat();
System.out.println(a.age);
// System.out.println(a.weight);
a.eat();
// a.playGame();
}
}
3.多型的好處和弊端
-
好處
? 提高程式的擴展性,定義方法時候,使用父型別作為引數,在使用的時候,使用具體的子型別參與操作 -
弊端
? 不能使用子類的特有成員
4.多型中的轉型
-
向上轉型
? 父類參考指向子類物件就是向上轉型 -
向下轉型
? 格式:子型別 物件名 = (子型別)父類參考;
代碼演示:
??動物類
public class Animal {
public void eat() {
System.out.println("動物吃東西");
}
}
??貓類
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("貓吃魚");
}
public void playGame() {
System.out.println("貓捉迷藏");
}
}
??測驗類
public class AnimalDemo {
public static void main(String[] args) {
//多型
//向上轉型
Animal a = new Cat();
a.eat();
// a.playGame();
//向下轉型
Cat c = (Cat)a;
c.eat();
c.playGame();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/292941.html
標籤:java
