個人簡介
👀個人主頁: 前端雜貨鋪
?開源項目: rich-vue3 (基于 Vue3 + TS + Pinia + Element Plus + Spring全家桶 + MySQL)
🙋?♂?學習方向: 主攻前端方向,正逐漸往全干發展
📃個人狀態: 研發工程師,現效力于中國工業軟件事業
🚀人生格言: 積跬步至千里,積小流成江海
🥇推薦學習:🍖開源 rich-vue3 🍍前端面試寶典 🍉Vue2 🍋Vue3 🍓Vue2/3項目實戰 🥝Node.js實戰 🍒Three.js🌕個人推廣:每篇文章最下方都有加入方式,旨在交流學習&資源分享,快加入進來吧
內容 | 參考鏈接 |
---|---|
Java基礎(一) | Hello World,8種數據類型,鍵盤錄入 |
Java基礎(二) | 數組,方法,方法重載 |
Java基礎(三) | 類和對象、構造方法 |
Java基礎(四) | 字符串、StringBuffer、StringBuilder、StringJoiner |
Java基礎(四) | ArrayList |
文章目錄
- 前言
- 繼承
- Java 繼承的特點
- 方法重寫
- 繼承中構造方法的訪問特點
- static
- 總結
前言
大家好,這里是前端雜貨鋪。
本篇文章,我們主要學習 Java 中繼承,并順帶認識一下 static。
繼承
繼承,可以讓類和類之間產生子父的關系。我們可以把多個子類中重復的代碼抽取到父類中,子類可以直接使用,減少代碼冗余,提高代碼復用性。
子類可以得到父類的屬性和行為,子類可以使用。
子類可以在父類的基礎上新增其他功能,使得子類更強大。
public class 子類 extends 父類 {}
Java 繼承的特點
- Java 只支持單繼承,不支持多繼承,但支持多層繼承(A 繼承父類 B,B 繼承父類 C…)
- Java 中所有的類都直接或間接繼承于 Object 類
- 子類只能訪問父類中的非私有成員
- 子類中 不能繼承 父類中 非私有和私有的構造方法
- 子類中 能繼承 父類中 非私有和私有的成員變量(但私有不可用)
- 子類中 能繼承 父類中 虛方法表(非private、非static、非final修飾)中的成員方法,其余不能繼承
- 繼承中成員變量訪問特點:就近原則:先在局部位置找,本類成員位置找,父類成員位置找,逐級往上
方法重寫
幾個注意事項:
- 重寫方法的名稱、形參列表必須與父類中的一致
- 子類重寫父類方法時,訪問權限子類必須大于等于父類(空著不寫 < protected < public)
- 子類重寫父類方法時,返回值類型子類必須小于等于父類
- 只有被添加到虛方法表中的方法才能被重寫
package com.javabasic.define;public class Test {public static void main(String[] args) {Student student = new Student();student.lunch();}
}class Person {public void eat() {System.out.println("父類-吃饅頭");}public void drink() {System.out.println("父類-喝開水");}
}class Student extends Person {public void lunch() {this.eat();this.drink();super.eat();super.drink();}@Overridepublic void eat() {System.out.println("子類-吃辣條");}@Overridepublic void drink() {System.out.println("子類-喝飲料");}
}
繼承中構造方法的訪問特點
- 子類不能繼承父類的構造方法,但是可以通過super調用
- 子類構造方法的第一行,有個默認的super()
- 默認先訪問父類中無參的構造方法,再執行自己
- 如果想要調用父類的有參構造方法,必須手動書寫
Person.java
package com.javabasic.define;public class Person {String name;int age;public Person() {System.out.println("父類的無參構造");}public Person(String name, int age) {this.name = name;this.age = age;}
}
Student.java
package com.javabasic.define;public class Student extends Person {public Student() {super();System.out.println("子類的無參構造");}public Student(String name, int age) {super(name, age);}
}
Test.java
package com.javabasic.define;public class Test {public static void main(String[] args) {// 調用無參構造,先走父,再走子Student student = new Student();// 間接調用父類的有參構造Student student2 = new Student("張三", 22);System.out.println(student2.name + ", " + student2.age);}
}
static
static 表示靜態,是 Java 中的一個修飾符,可以修飾成員方法,成員變量。
被 static 修飾的成員變量,叫做靜態變量。
- 被該類所有對象共享
- 不屬于對象,屬于類
- 隨著類的加載而加載,優先于對象存在
Student.java
package com.javabasic.define;public class Student {private String name;private int age;public static String teacherName;public void show() {System.out.println(name + " " + age + " " + teacherName);}public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
Test.java
package com.javabasic.define;public class Test {public static void main(String[] args) {Student.teacherName = "xx老師";Student student = new Student("前端雜貨鋪", 20);student.show();}
}
被 static 修飾的成員方法,叫做靜態方法。
- 多用在測試類和工具類中
- Javabean 類中很少會用
- 靜態方法中沒有 this 關鍵字
- 靜態方法只能訪問靜態
- 非靜態方法可以訪問非靜態方法和靜態方法
下面,我們創建一個工具類 ArrayUtil.java,里面均為靜態方法,用于處理一些數組數據。
ArrayUtil.java
package com.javabasic.define;public class ArrayUtil {private ArrayUtil() {}public static String printArr(int[] arr) {StringBuilder sb = new StringBuilder();sb.append("[");for (int i = 0; i < arr.length; i++) {if (i == arr.length - 1) {sb.append(arr[i]);} else {sb.append(arr[i]).append(", ");}}sb.append("]");return sb.toString();}public static double getAverage(double[] arr) {double sum = 0;for (int i = 0; i < arr.length; i++) {sum += arr[i];}return sum / arr.length;}
}
Test.java
package com.javabasic.define;public class Test {public static void main(String[] args) {int[] arr1 = {1, 2, 3, 4, 5};String str = ArrayUtil.printArr(arr1);System.out.println(str);double[] scores = {1.0, 2.0, 3.0, 4.0, 5.0};double average = ArrayUtil.getAverage(scores);System.out.println(average);}
}
總結
本篇文章,我們學習了繼承的相關內容,并認識了 static 的特性及使用場景…
好啦,本篇文章到這里就要和大家說再見啦,祝你這篇文章閱讀愉快,你下篇文章的閱讀愉快留著我下篇文章再祝!
參考資料:
- Java 基礎(bilibili-黑馬程序員)
- 菜鳥教程–Java