面向物件(封裝與繼承)
封裝:
封裝的概念:將程式碼的細節隱藏起來,然後對外界提供可以使用的公共方法。
在現實生活中,一臺電飯煲,一臺榨汁機都是封裝的體先,榨汁機只需要我們加入材料按下按鈕,就能為我們榨一杯果汁,我們不知道榨汁機內部的執行細節,但是它給了我們想要的結果。同樣,在程式設計的世界裡,也進行了程式碼之間的封裝,比如我們的陣列工具類Arrays就是一個封裝,它可以將無序的陣列排列成有序的,可以將查詢陣列某個數的位置,這些功能就像榨汁機一樣給我們帶來了遍歷。
工具類Arrays的實踐:
public static void main(String[] args) { int arr [] = {89,21,-23,00,24, 8 ,-89,27}; //定義陣列arr Arrays.sort(arr); //呼叫工具類Arrays來排序arr陣列 System.out.println(Arrays.toString(arr)); //呼叫toString 來列印陣列arr }
Arrays 的封裝讓我們運算元組簡單方便
封裝基本使用:
-
使用
private
關鍵字來修飾類的成員(成員變數和成員方法)以及類。 -
對需要訪問的成員變數,提供對應的一對
getXxx
方法 、setXxx
方法。 -
private
修飾的成員方法,只允許本類中的其他方法呼叫; -
成員變數和成員方法:
public class Dome02 { /* * 首先,成員變數的封裝 將成員變數修飾為private這樣就只能本類訪問,其他的類就訪問不了 但是如果不給其他類訪問又無意義了 */ /* 所以我們可以提供公共的方法來使其他類來訪問 */ private String name; private int age; // 建立get set方法 set賦值,get獲取值; public void setName(String name) {this.name = name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } public String getName() { return name; } // 封裝方法 如果不想其他類直接訪問到這個類同樣可以使用 private 僅供本類使用 private void name() { } }
封裝類:
public class Dome03 { private class User{ //在一個類中定義一個私有的User類 private int a; } public static void main(String[] args) { /* 如果想要訪問內部類 首先要訪問外部的公共類,在去訪問內部私有類 */ Dome03 dome03 = new Dome03(); User user = dome03.new User(); user.a =1; } }
封裝的優點:
- 良好的封裝能減少程式碼的耦合;
- 安全性高,不用擔心外部篡改內部資料
- 靈活度高,提高了程式碼的複用性
- 能夠更好,更精準的控制修改程式碼、
訪問修飾符:
注:default在修飾時什麼都不用寫,預設就為 default
例如 voidname(){ }就是一個default修飾的方法,不用寫default這個關鍵字 ,否則會報錯
繼承:
繼承簡述:繼承就是子類繼承父類的特徵和行為,使得子類物件(例項)具有父類的例項域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。
繼承語法:
class 父類 { 。。。 } class 子類 extends 父類 { 。。。 }
繼承後的特點:
- 成員變數 :子父類中出現了同名的成員變數時,在子類中需要訪問父類中非私有成員變數時,需要使用 super 關鍵字 super.屬性名
- 成員方法:如果子類出現與父類重名方法,但是方法引數不同,這種情況屬於方法過載; 如果子類出現與父類重名方法,同時方法引數也相同,這種情況叫做方法重寫Override。
子類與父類的創造空間:
在每次建立子類物件時,先初始化父類空間,再建立其子類物件本身。目的在於子類物件中包含了其對應的父類空間,便可以包含其父類的成員,如果父類成員非private修飾,則子類可以隨意使用父類成員。程式碼體現在子類的構造方法呼叫時,一定先呼叫父類的構造方法。
繼承的特點:
1、Java只支援單繼承,不支援多繼承
//一個類只能有一個父類,不可以有多個父類。
class C extends A{} //ok
class C extends A,B... //error
2、Java支援多層繼承(繼承體系)
class A{}
class B extends A{}
class C extends B{}
3、所有的類都直接或者間接繼承了Object類,Object類是所有類的父類。
final關鍵字:
Java提供有一個final關鍵字,中文意思是最終、終極的意思,在Java中代表不可變更的意思。final關鍵字可以用來修飾類、成員變數、成員方法。
概念:
- final修飾類:表示最終類,也就是此類不能被繼承;
- final修飾變數:表示常量,也就是一個變數的值始終如一,無法變更;
- final修飾方法:表示最終方法,也就是此方法不能被重寫。
程式碼:
// 1、final類 public final class Hello { 。。。 } // 2、final方法、變數 public class Hello { private final int n=1; public final void run() { System.out.println("hello world"); } }
注意點:
- 被final修飾的成員變數,必須進行初始化賦值,且值不能變更,否則編譯出錯;
- 被final修飾的成員變數,通常會結合final和static關鍵字一起使用,表示一個全域性的靜態常量,常量名用大寫;
- 被final修飾的區域性變數,不能使用static修飾,同時可以不用先初始化賦值,使用時進行一次賦值即可,後續也不能變更;
個人學習,內容簡略