# week4 Class Field Method

### 2017-07-04(二)

## \[Java Week4] 類、字段、方法

* **類**

  定義：類是組成java程序的基本要素，它**封裝**一類對象的狀態與方法，就是把變量跟函數放在一對括號的類裡面。

  * 繼承
    * 用法：一個類只能有一個父類，透過**extends**
    * 好處：可修改父類的行為、狀態，甚至添加新的狀態與行為，可以提高程序的抽象度
* **字段:**

  定義：是類的屬性，用變量來表示

  * 隱藏：定義與父類的相同域變量，實際用得較少
  * 添加：增加心得域變量，使得子類比父類多一些屬性
* **方法**

  定義：是類的功能與操作，用函數表示

  * **構造方法**（constructor）:用來初始化一個新對象，與類同名，不返回數據type，假設沒有定義任何夠照方法，系統會自動產生一個構造方法
  * **覆蓋**（override）:子類也可以重新定義父類的同名方法
  * **繼承**：student繼承Person的sayHello方法
  * **添加**：像是在student中，增加判別分數方法
  * **重載**（overload）:方法有相同名字，但是方法的簽名（signature）不同、參數個數、參數類型不同，這樣可以實現多態(Polymorphism)
* **This:**
  * 解決局部變量
  * 域名問題，this.age表示域變量，而age表示參數變量
  * 調用另一種方法:調用語句要放在第一句

### 控制符（Modifiers）:

* **訪問：**
  * private(限同一類中)
  * 默認（同一包、同一類中）
  * protected（同一包、同一類、不同包的子類）
  * public（全部都能訪問）
* **非訪問:**
  * static：靜態、非實例的，不屬於任何一個對象，可以用來表示全局變量，不能用this或super，例如Math.random()
  * final：不能被繼承，是不能被子類覆蓋，是只讀量，static final表示常量
  * abstract：抽象類只需聲明，不需實現，用分號而不是{}，像是範例代碼的animal

### 接口(Interface):

* 實現：implements，可以實現多繼承
* 定義：某種特徵的約定，所有方法都是，public abstract
* 作用：面向街口編程，可以了解對象的交互介面，而不需要瞭解對象所對應的類
* 類型：是一引用類型
* 常量：接口的常量具有static, final的特性
* 表示法： \`\`\` class Person extends Animal implements Runner,Swimmer,Flyable { public void run() { System.out.println("run"); } }

  \`\`\`

### 總結：

* 本週談到類、方法、字段的組合，還有控制符的特性，分成訪問與非訪問的層面， 兒學習過程中，總是覺得就把特性記下來就好，但是在看範例代碼時，才發現自己只是自以為懂罷了，像是this的概念，重載的概念、super的應用，還有最頭痛的Interface， 這個部分，我覺得還得再看很多遍，直到能夠能手寫出code ，我覺得才算真正的瞭解。
* 透由代碼來加上強記下理論的知識點，兩者不可缺。
* 代碼第一次先求output、抄寫一遍、自己想辦法寫出來。
