[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;
。
- return語句可以不聲明執行語句
- 無返回值(void):主要用於設置。
- 有返回值(return語句):需要後續使用。
-
按參數分:
- 無參數
- 有參數(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 ] 可變個數形參
採用可變個數形參來定義方法,傳入多個相同類型的數據
-
格式:
數據類型 ... 變量名
。 -
可以傳入多個參數。
-
可變參數的方法與本類中的方法名相同,形參不同的方法之間構成重載。
-
與本類中的方法名相同,形參類型也相同的數組之間不構成重載,兩者不能共存。
- 調用時可以用數組形式傳遞形參。
-
聲明的位置在形參列表的末尾。
-
最多只能聲明一個可變形參。
八、封裝
封裝性的體現
- 將類的屬性私有化。
- 不對外暴露私有的方法。
- 單例模式。
權限修飾符
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
關鍵字
super
可以理解為 “父類的” 。super
可以用來調用屬性、方法、構造器。- 使用
- 可以在子類的方法或構造器中,使用
super.屬性/方法
方式,顯式調用父類中聲明的屬性或方法。但通常情況下省略super.
。 - 特殊情況:當子類和父類中定義了同名的屬性時,必須通過顯式調用
super.屬性
來表示調用的是父類中的屬性。 - 特殊情況2:當子類重寫父類的方法以後,調用 父類被重寫的方法 時,必須顯示調用
super.方法
的方式調用被重寫的方法。
- 可以在子類的方法或構造器中,使用
super
調用構造器- 顯式使用
super(形參列表)
的方式調用 父類中聲明的指定的構造器。 super(形參列表)
必須聲明在子類構造器的首行。- 在類的構造器中,
this(形參列表)
和super(形參列表)
只能二選一,不能同時出現。 - 在構造器的首行,沒有顯式聲明
this(形參列表)
和super(形參列表)
時,則默認調用的是super()
。 - 在類的多個構造器中,至少有一個類的構造器中使用了
super(形參列表)
調用父類中的構造器。
- 顯式使用