1. 程式人生 > 實用技巧 >面向物件(封裝與繼承)

面向物件(封裝與繼承)

封裝:

封裝的概念:將程式碼的細節隱藏起來,然後對外界提供可以使用的公共方法。

在現實生活中,一臺電飯煲,一臺榨汁機都是封裝的體先,榨汁機只需要我們加入材料按下按鈕,就能為我們榨一杯果汁,我們不知道榨汁機內部的執行細節,但是它給了我們想要的結果。同樣,在程式設計的世界裡,也進行了程式碼之間的封裝,比如我們的陣列工具類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修飾的成員方法,只允許本類中的其他方法呼叫;

  • 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修飾,同時可以不用先初始化賦值,使用時進行一次賦值即可,後續也不能變更;
  • final修飾基本資料型別,表示該基本資料型別的值一旦在初始化後便不能發生變化
  • final修飾引用資料型別,則在對其初始化之後便不能再改變引用地址了,但該引用所指向的物件的內容是可以發生變化的

個人學習,內容簡略