[Java]Java入門筆記(三):類、對象和方法

七、類、對象和方法

類和對象的關係

  • 類定義了對象的本質;

  • 類(class)是對象(object)的模板,而對象(object)是類的一個實例(instance)。

  • 使多個對象的指向相同:

    Student stu1 = new Student();
    Student stu2 = stu1;
    

7.1 類

7.1.1 類的組成

  • 變量:指對象的狀態

  • 方法:指對象的功能單元

  • 消息:軟件對象通過相互間傳遞消息來互相作用和通信;

    • 一個消息由三部分組成:
      • 接收消息的對象;
      • 接收對象要採取的方法;
      • 方法需要的參數。
  • 注意:

    • 類體中只能定義變量、常量和方法。

    • 對於靜態方法或變量,建議使用類名調用:Student.***;

7.1.2 類的三大特性

繼承、封裝、多態

7.1.3 類定義的語法規範

  • 類的嚴格定義

    [類的修飾符] class 類的名稱 [extends 父類名稱][implements 接口名稱列表]
    {
        變量定義及初始化;
        方法定義及方法體;
    }
    
  • 類的修飾符:public, abstract, final.

  public, abstract/final;

7.1.4 this 關鍵字

this指向自己的引用,即當前方法所在的對象。

  • 主要作用:將自己這個對象當做參數,傳給別的對象。
  • 如果形參名和類屬性名相同時,需要用到 this

7.1.5 構造器(構造方法)

構造器(構造方法)

  • 創建類的對象(也可以初始化相關屬性):new 構造方法

  • 顯式定義類的構造器之後,系統不再提供默認的空參構造器。

this 調用構造器

① 在類的構造器中,顯示的使用 this(形參列表) 的方式,調用指定的其他構造器。

② 構造器中不能通過 this(形參列表) 的方式調用自己。

③ 如果一個類中有 n 個構造器,則最多有 n-1 個構造器中使用了 this(形參列表)

④ 規定:this(形參列表) 必須在當前構造器的首行

⑤ 構造器內部,最多只能聲明一個 “this(形參列表)” ,用來調用其他的構造器。

7.2 對象

7.2.1 匿名對象

沒有顯式賦給一個變量。

  • 特徵:匿名對象只能調用一次。

  • 使用:new phone

    如:

    new Phone().playGame();
    

7.3 方法

7.3.1 方法定義的語法規範

  • 方法的定義:

    [方法修飾符] 返回類型 方法名稱(參數1,參數2,...)[throws exceptionalList]
    {
    	statement//方法體
    }
    
  • 方法修飾符:

    [public/protected/private] [static] [final/abstract] [native] [synchronized]
    
  • 有返回值的方法需要return語句,返回的值類型必須和方法類型相同

  • 靜態方法不能訪問非靜態。

7.3.2 方法分類

  • 按返回值分:

    • 有返回值(return語句):需要後續使用。
      • return語句可以不聲明執行語句 return;
    • 無返回值(void):主要用於設置。
  • 按參數分:

    • 無參數
    • 有參數(1個參數,多個參數)【實參與形參】
  • 按功能分:

    • 實例方法(實例成員方法)

    • 類方法(靜態方法)

    • 構造方法(構造函數 / 構造器)

      • 格式:

        public 類名([參數]){...}
        
      • Java中的每個類都有構造方法,用來初始化該類的一個新的對象。

      • 構造方法的名稱和類名相同,並且不返回任何數據類型

      • 系統在創建對象時會自動執行。

      • 構造方法應該包含的內容:

        1)定義一些初值或內存配置工作;

        2)一個類可以有多個構造方法(重載),根據參數的不同決定執行哪一個;

        3)如果程序中沒有定義構造方法,則創建實例時使用的是缺省構造方法,它是一個無內容的空實現的構造方法(public 類名() {})。

        例(按功能分):

        public class Test03Function {
            //構造方法
            public Test03Function() {
                System.out.println("構造函數Test03Function()");
            }
            //靜態方法
            static void testStatic() {
                System.out.println("靜態方法");
            }
            //實例方法
            void testFun() {
                System.out.println("實例方法");
            }
        }
        

7.3.3 方法調用方式

  • 靜態方法:類名.方法名

  • 靜態訪問非靜態的內容:

    創建對象 → 調用(對象名.需要調用的方法或變量

    • 創建對象:

      類名 對象名 = new 類名();
      例:
      Scanner in = new Scanner(System.in);
      

7.3.4 方法重載

  • 和返回值類型、形參的名稱無關,只和參數列表有關。

7.3.5 [ jdk5.0 ] 可變個數形參

[ jdk5.0 之前 ]:數據類型[] 變量名

[ jdk5.0 ] 可變個數形參

採用可變個數形參來定義方法,傳入多個相同類型的數據

  1. 格式:

    數據類型 ... 變量名

  2. 可以傳入多個參數。

  3. 可變參數的方法與本類中的方法名相同,形參不同的方法之間構成重載。

  4. 與本類中的方法名相同,形參類型也相同的數組之間不構成重載,兩者不能共存。

    • 調用時可以用數組形式傳遞形參。
  5. 聲明的位置在形參列表的末尾

  6. 最多只能聲明一個可變形參。

八、封裝

封裝性的體現

  1. 將類的屬性私有化。
  2. 不對外暴露私有的方法。
  3. 單例模式。

權限修飾符

private , 缺省(default) , private , protected

修飾符 類內部 同一個包 不同包的子類 同一個工程
private
缺省
protected
public
  • 對於 class 的修飾只能使用 public缺省
  • 可以用來修飾屬性、方法、構造器、內部類(缺省、public)。

九、繼承

關鍵字 extends

class A extends B{}

作用

子類可以繼承父類的非私有內容

繼承性的優點

​ ① 減少代碼冗餘,提高代碼復用性。

​ ② 便於功能的拓展。

​ ③ 為多態性的使用,提供了前提。

9.1 格式

​ 格式: class A extends B {}

​ ① A:子類、派生類、subclass

​ ② B:父類、超類、基類、superclass

​ ③ 子類A 中獲取了 父類B 中聲明的結構:屬性和方法。但是父類中,私有( private )的屬性和方法不能直接調用

9.2 *注意

  • 一個類可以被多個類繼承。
  • 單繼承性:一個類只能有一個父類。
  • 子父類是相對的概念。
  • 子類直接繼承的父類:直接父類;間接繼承的父類:間接父類。
  • 子類獲取直接父類和所有簡介父類中聲明的屬性和方法。

9.3 Object 類

Object

  • 如果一個類沒有顯式聲明父類,則此類繼承於 java.lang.Object 類。
  • 所有的 Java類(除了 java.lang.Object 類之外)都直接或間接繼承於 java.lang.Object 類。

9.4 方法的重寫 (override / overwrite)

  • 定義:在子類中根據需要對父類中繼承的方法進行改造。(也稱為重置、覆蓋)。

    在執行程序時,子類的方法將覆蓋父類的方法

  • 應用:

    重寫以後,在執行程序時,子類的方法將覆蓋父類的方法

  • 重寫的規定:

    ​ 方法的聲明:

    權限修飾符 返回值類型 方法名(形參列表) throws 異常的類型 {
        // 方法體
    

    ​ 子類中的是重寫的方法,父類中的是被重寫的方法

    • 子類重寫的方法的 方法名和形參列表 相同。

    • 子類重寫的方法的 權限修飾符 不小於 父類被重寫的方法。

      • 子類中不能重寫父類中 private 的方法。
    • 返回值類型:

      父類被重寫的方法的返回值 子類重寫的方法的返回值
      void 只能是 void
      A
      Object
      A 類 或者 A 類的子類
      String
      基本數據類型 必須是相同的 基本數據類型
  • 子類重寫的方法拋出的異常類型 不大於 父類被重寫方法拋出的異常類型。

  • 子類和父類中的同名同參數的方法:

    ​ 或者都聲明為 非static 的(考慮重寫),

    ​ 或者都聲明為 static 的(不是重寫)。

9.5 super 關鍵字

  1. super 可以理解為 “父類的” 。
  2. super 可以用來調用屬性、方法、構造器。
  3. 使用
    • 可以在子類的方法或構造器中,使用 super.屬性/方法 方式,顯式調用父類中聲明的屬性或方法。但通常情況下省略 super.
    • 特殊情況:當子類和父類中定義了同名的屬性時,必須通過顯式調用 super.屬性 來表示調用的是父類中的屬性。
    • 特殊情況2:當子類重寫父類的方法以後,調用 父類被重寫的方法 時,必須顯示調用 super.方法 的方式調用被重寫的方法。
  4. super 調用構造器
    • 顯式使用 super(形參列表) 的方式調用 父類中聲明的指定的構造器。
    • super(形參列表) 必須聲明在子類構造器的首行
    • 在類的構造器中,this(形參列表)super(形參列表) 只能二選一,不能同時出現
    • 在構造器的首行,沒有顯式聲明this(形參列表)super(形參列表) 時,則默認調用的是 super()
    • 在類的多個構造器中,至少有一個類的構造器中使用了 super(形參列表) 調用父類中的構造器。
Tags: