2019/0514/Java_靜態類別+繼承特性

#Java類別&物件

##Static 類別成員

呼叫 ex: Math.PI

不能存取非Static類別成員

This這個參照是屬於動態方法 new 初始化物件 所以 static無法使用 static 屬於編譯時就存在了 new則是new之後才存在

###目的

展示動態物件內靜態屬性值

靜態方法只能讀取靜態參數值

動態靜態無法互相呼叫參照

使用靜態方法方式

動態方法new完後應該靜態參數就可以存取

但還是會報錯應該要在 static方法內存取

### EmployeeS

### EmployeeSTest

##靜態類別匯入

Import 在 c#就是using

### StaticImportTest.java

#繼承

##特殊化specialization

##直接間接父類別

##直接間接父類別direct superclass 上層(一代 (其實有祖類別

##間接父類別 indirect superclass

java元祖類別為 object

Java只支援單一繼承 跟c++不一樣 sigle inheritance

##類別在使用上有兩種狀態

Is a relationship

###繼承

Has a relationship

###複合

越子代特徵會越明顯越清楚跟界門綱目科屬種很像

##向上轉型

一般化往上移 ( 通用

特性化往下移

##繼承-存取權

Private 必須要在同一個 class 裡面

Protected 要有繼承關係或同個packge

##Entends 繼承

###CommissionEmployee.java

##在不夠熟悉時 通常是實作兩個子類別最後再把相同之處往上搬制做父類別

操控CommissionEmployee類別鑄造物件並操控物件進行方法

但其實是準備跟Employee類別做一般化的父類別

### CommissionEmployeeTest.java

##建構子不會被繼承

##不標記@Override也會複寫但最好要加上去

在實作一個子類別 不一樣的地方只有紅色的地方

###BasePlusCommissionEmployee.java

##減少重複程式碼

建構子 方法 程式碼幾乎一樣

##防止錯誤 ( 重點為第三點 維護困難

##繼承的使用

設計繼承架構 從兩個都是繼承object轉成其中一個為父類別,

(BasePlusCommissionEmployee、CommissionEmployee

#子類別呼叫父類別建構式

##初始化new父輩實體變數(參數) super , c#裡面是base

###如果沒有寫參數就會自動呼叫沒有參數的版本

###super(參數, 參數, 參數…) super(firstName, lastName, socialSecurityNumber, ◦ grossSales, commissionRate);

###Super呼叫方法也可以間接取到父輩的參數 super.getGrossSales

###或是把參數從私有改為保護或公有

###類別設計好了要在新增一個檔案test做測試

###熟了的話可以直接從規格書知道那些要寫在父類(一般化)別那些要寫在子(特殊化),架構邏輯要清楚

###CommissionEmployeeExtV1 ( 父類別 繼承實作

###BasePlusCommissionEmployeeExtV1 ( 子類別 繼承實作

### BasePlusCommissionEmployeeExtV1Test

( 現在這個階段都在做類別所以檔案內不會有print必須要用 test檔案內 類別的物件操控做顯示

##繼承重點

經過一系列以上的操作可以看到繼承後的程式碼少了非常少 (重複的都在父類別了

而且修改只要改源頭不需要一個檔案一個檔案改

接著 V2版本

保留封裝特性但同時又能存取父類別參數

孫代也更好的可以存取參數

##參數使用保護繼承的問題

###參數變成無效直沒經過驗證(因為驗證寫在父輩

###修改父類別的內容變成不會影響到子類別

###CommissionEmployeeExtV2

###BasePlusCommissionEmployeeExtV2

###BasePlusCommissionEmployeeExtV2Test

Last updated

Was this helpful?