2020.6.18 20:29
繼承
繼承是面向對象的三大特徵之一,可使得子類具有父類的屬性和方法,也可在子類中重新定義以及追加屬性和方法。
格式:通過extends來實現
注意點:繼承只能單繼承,通俗說父親只能有一個。
例如:class A extends B{ … }
class 子類 extends 父類{ ... }
class student extends people{ … }
繼承的好處:
- 使得類與類之間產生關係,父子關係,子類可使用父類中的非私有成員。
- 提高代碼的複用性,多個類相同的成員可以放到同一個類中。
- 提高代碼的維護性,只需修改一處即可。
弊端:類之間產生了關係,增強了類的耦合性,當父類發生改變時,子類中的實現也會隨着變化,削弱了子類的獨立性。
super和this關鍵字
this代表本類對象的引用。
super代表父類存儲空間的標識。
this.成員變量---->訪問本類成員變量
super.成員變量---->訪問父類成員變量
構造方法:
this(…):訪問本類的構造方法
super(…):訪問父類的構造方法
子類所有的構造方法都會默認訪問父類中的無參構造方法。
方法重寫
子類出現和父類中一模一樣的方法聲明,方法名一樣,參數列表也必須一樣。
子類需要父類中的功能,還可有自己定義的特有內容。
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()方法被調用");
}
}
final關鍵字
修飾基本數據類型變量:數值不能發生改變
修飾引用數據變量時:引用類型的地址值不能發生改變,內容可變。
public static void main(String[] args){
final Student s = new Student(23);
s = new Student(24); // 錯誤
s.setAge(24); // 正確
}
static關鍵字
static表示靜態,可修飾【成員方法】和【成員變量】
可使用類名和對象名來調用。推薦使用類名調用。
重點:
- 非靜態的成員方法:能訪問靜態的成員變量、非靜態的成員變量、靜態的成員方法、非靜態的成員方法。
- 靜態的成員方法:能訪問靜態成員變量、靜態的成員方法
總結:靜態成員方法只能訪問靜態成員。