>[success] # java 繼承
* 當多個類之間有**相同**的**特征和行為**時,可以將相同的**內容提取**出來組成 **一個公共類**,讓多個類吸收公共類中已有特征和行為而在多個類型只需 要編寫自己獨有特征和行為的機制,叫做**繼承**
~~~
public class Worker extends Person{}
~~~
* Worker類繼承自Person類,其中Person類叫做**超類、父類、基類**Worker類叫**做派生類、子類、孩子類**
* **繼承作用** 避免代碼重復,通過`extends` 繼承,子類繼承父類后將有**本類的成員(變量和方法)和父類的成員(變量和方法)**,承提高了代碼的**復用性**,**可維護性**及**擴展性**
* 使用繼承必須滿足邏輯關系:**子類 is a 父類**,也就是不能濫用繼承。
* Java語言中只支持單繼承**不支持多繼承**
>[danger] ##### 繼承特點
1. 子類無法訪問父類的`private`字段或者`private`方法
* 父類
~~~
public class Person {
private int age = 12;
public String name = "w";
private void work() {
System.out.print("私有的子類不能訪問");
}
public void sleep() {
System.out.print("共有的子類能訪問");
}
}
~~~
* 子類
~~~
public class Worker extends Person {
void userParent() {
sleep();
System.out.print(name);
// worker(); // 私有的無法訪問
// System.out.print(age); // 私有的無法訪問
}
public static void main(String[] args) {
Worker worker = new Worker();
worker.userParent();
}
}
~~~
2. **子類的對象**時都會**自動調用父類的無參構造方法**, 來初始化從父類中繼承的成員變量,相當于在構造方法的第一行增加代 碼`super()`的效果,因此`this()`和`super()` 不能共存,想調用父類有參的構造函數需要調用傳參`super(參數)`
* 父
~~~
public class Person {
Person() {
System.out.println("無參的構造方法");
}
Person(int age) {
System.out.println("有參的構造方法");
}
Person(String name) {
System.out.println("有參的構造方法");
}
}
~~~
* 子
~~~
public class Worker extends Person {
Worker() {
// 默認相當于調用了無參的構造函數
// super();
System.out.println("子無參的構造方法");
}
Worker(int age) {
// 這么寫不可以因為二者要求都是是給首行
// super();
// this();
System.out.println("子有參的構造方法");
}
Worker(String name) {
super(name);
System.out.println("子有參的構造方法");
}
public static void main(String[] args) {
Worker worker = new Worker(); // 無參的構造方法 子無參的構造方法
Worker worker1 = new Worker(10); // 無參的構造方法 子有參的構造方法
Worker worker2 = new Worker("w"); // 有參的構造方法 子有參的構造方法
}
}
~~~
- windows -- 環境變量
- Vscode -- 編寫java
- 初始java
- java -- 關鍵字
- 編寫第一個java程序
- java -- 注釋
- 計算機存儲 -- 進制
- java -- 類型
- java -- 變量
- 數字類型
- 布爾類型
- 字符類型
- 類型轉換
- 雙等比較是什么
- java -- 運算符
- 算數運算符
- 字符串拼接
- 關系/比較運算符
- 自增減運算符
- 邏輯運算符
- 三目運算
- 賦值運算符
- 移位運算符
- 位運算符
- 運算符優先級
- java -- 流程控制語句
- if /else if /if -- 判斷
- switch case分支結構
- for -- 循環
- 用雙重for循環
- while -- 循環
- do while -- 循環
- 案例練習
- java -- 數組
- 數組的存儲
- 數組的增刪改查
- 數組的特點
- 數組案例
- 二維數組
- 數組的工具方法
- java -- 方法
- java -- 方法的重載
- java -- 方法的調用流程
- java -- 類方法傳參注意事項
- java -- 方法練習案例
- 對比 return break continue
- for each循環
- java -- 基礎練習
- java -- 面向對象
- java -- 創建類和對象
- java -- 訪問控制符
- java -- 類成員方法
- java -- 構造方法
- java -- this
- java -- 封裝
- java -- 對象內存圖
- java -- 創建對象案例
- java -- static
- java -- 繼承
- super -- 關鍵字
- java -- 構造塊和靜態代碼塊
- java -- 重寫
- java -- final
- java -- 多態
- java -- 抽象類
- java -- 接口
- 引用類型數據轉換
- 綜合案例
- java -- 內部類
- java -- 回調模式
- java -- 枚舉類型
- java -- switch 使用枚舉
- java -- 枚舉方法使用
- java -- 枚舉類實現接口
- java -- javaBean
- java -- package 包
- java -- import
- java -- 遞歸練習
- java -- 設計模式
- 單例模式
- java -- 注解
- java -- 元注解
- Java -- 核心類庫
- java -- 處理字符串
- Java -- String
- String -- 常用方法
- String -- 正則
- Java -- StringBuilder 和 StringBuffer
- 知識點
- Java -- StringJoiner 字符串拼接
- 練習題
- 字符串的總結
- Java -- 包裝類
- Integer
- Double
- Boolean
- Character
- java -- 集合類
- java -- util.Collection
- Iterator接口
- java -- util.List
- java -- ArrayList
- java -- util.Queue
- java -- util.Set
- java -- util.Map
- java -- util.Collections
- Java -- Math
- Java -- java.lang
- Java -- Object
- Java -- 獲取當前時間戳
- Java -- 異常
- Java -- java.util
- java -- Date
- java -- Calender
- Java -- java.text
- Java -- SimpleDateFormat
- Java -- java.time
- Java -- java.io
- java -- io.File
- java -- 泛型
- IDEA -- 用法