標籤:用法 相同 使用 class his 類成員 多層 同名 get
1.繼承extends(也叫擴充)
引入
首先寫兩個類:
//定義學生類
class Student {
//成員變數
private String name;
private int age;
//空構造
public Student(){}
//getXxx()/setXxx()
public void eat() {
System.out.println("吃飯");
}
}
//定義教師類
class Teacher {
//成員變數
private String name;
private int age;
//空構造
public Teacher(){}
//getXxx()/setXxx()
public void eat() {
System.out.println("吃飯");
}
}
2.繼承概述
多個類中存在相同屬性和行為時,將這些內容抽取到單獨一個類中,那麼多個類無需再定義這些屬性和行為,只要繼承那個類即可。
通過extends關鍵字可以實作類別與類的繼承,繼承的格式如下:
class 子類名 extends 父類名 {}
單獨的這個類,也就是被繼承的類,稱為父類,基類或者超類;這多個類稱為子類或者衍生類別。
有了繼承以後,我們定義一個類的時候,可以在一個已經存在的類的基礎上,還可以定義自己的新成員。
3.繼承的案例和繼承的好處
通過一個具體案例來示範代碼
案例1:學生類和教師,定義兩個功能(吃飯,睡覺)
案例2:加入人類後改進
/*
繼承概述:
把多個類中相同的內容給提取出來定義到一個類中。
格式:
class 子類名 extends 父類名 {}
好處:
A:提高了代碼的複用性
B:提高了代碼的維護性
C:讓類與類之間產生了關係,是多態的前提
*/
//使用繼承前
/*
class Student {
public void eat() {
System.out.println("吃飯");
}
public void sleep() {
System.out.println("睡覺");
}
}
4.繼承的好處
提高了代碼的複用性
多個類相同的成員可以放到同一個類中
提高了代碼的維護性
如果功能的代碼需要修改,修改一處即可,繼承的類中自動都被修改了
讓類與類之間產生了關係,是多態的前提
5.Java中繼承的特點
即:一個類只能有一個直接父類,不可以有多個直接父類。
class SubDemo extends Demo{} //ok
class SubDemo extends Demo1,Demo2...//error不能繼承多個類
class A{}
class B extends A{}
class C extends B{}
6.Java中繼承的注意事項
子類只能繼承父類所有非私人的成員(成員方法和成員變數)
子類不能繼承父類的構造方法,但是可以通過super(後面講)關鍵字去訪問父類構造方法。
不要為了部分功能而去繼承
我們到底在什麼時候使用繼承呢?
繼承中類之間體現的是:"is a"的關係。
7.繼承中成員變數的關係
案例示範
子父類中同名和不同名的成員變數
子類方法中尋找變數的順序
類的組成:
成員變數:
構造方法:
成員方法:
而現在我們又講解了繼承,所以,我們就應該來考慮一下,類的組成部分的各自關係。
繼承中成員變數的關係:
A:子類中的成員變數和父類中的成員變數名稱不一樣,這個太簡單。
B:子類中的成員變數和父類中的成員變數名稱一樣,這會出現什麼情況呢?
在子類方法中訪問一個變數的尋找順序:
a:在子類方法的局部範圍找,有就使用
b:在子類的成員範圍找,有就使用
c:在父類的成員範圍找,有就使用
d:如果還找不到,就報錯。
8.結論
在子類方法中訪問一個變數
首先在子類局部範圍找,也就是方法內部
然後在子類成員範圍找,也就是子類的成員變數
最後在父類成員變數範圍找(肯定不能訪問到父類局部範圍)
如果還是沒有就報錯。
9.super關鍵字
super的用法和this很像
this 代表本類對象的引用
super 代表父類儲存空間的標識(可以理解為父類對象的引用)
用法(this和super均可如下使用)
this.成員變數
super.成員變數(訪問父類的成員變數,不能訪問父類的private變數)
訪問靜態成員時,也可以用:父類名.靜態成員
this(…) super(…) //
this.成員方法() super.成員方法()
10.問題是:
我不僅僅要輸出局部範圍的num,還要輸出本類成員範圍的num。怎麼辦呢?
我還想要輸出父類成員範圍的num。怎麼辦呢?
如果有一個東西和this相似,但是可以直接存取父類的資料就好了。
恭喜你,這個關鍵字是存在的:super。
this和super的區別?
this代表本類對應的引用。
super代表父類儲存空間的標識(可以理解為父類引用,可以操作父類的成員)
A:調用成員變數
this.成員變數 調用本類的成員變數
super.成員變數 調用父類的成員變數
B:調用構造方法
this(...) 調用本類的構造方法
super(...) 調用父類的構造方法
C:調用成員方法
this.成員方法 調用本類的成員方法
super.成員方法 調用父類的成員方法
大資料JAVA基礎第十天