C50108
  • 2019/0801/轉職成功路途開始
  • 自學心得與此網站使用方式
  • 行事曆&課程大綱
  • 2019/0224/自我檢視
  • 雜記
    • 2019/0103/雜記
    • 2019/0410/作品集建構
    • 2019/0429/職訓局書單
    • 2019/0317/自我檢視
    • 2019/0316/陪玄松去高車討論&環境圖流程圖大神們line討論
    • 2019/0305/Gitbook使用方法
  • 2018/10XX/轉職心路歷程
  • 職訓局里程碑
    • 201901
      • 2019/0103/行動商務系統設計與開發,職訓局報到
      • 2019/0104/正式開課日&行動商務課程簡介
      • 2019/0108/資料庫理論/Access&WEB開發簡介
      • 2019/0109/資料庫資料型態屬性&HTMLtag
      • 2019/0110/計概基礎概念
      • 2019/0111/HTML表格table&form表單_post/get&iframe
      • 2019/0114/計&網概概念&網路層概念
      • 2019/0115/資料庫Access運算值&CSS簡介&在職班補充
      • 2019/0116/Access比較/邏輯運算&CSS_在職班補充+選擇器+Box model
      • 2019/0117/資訊系統架構&網路層
      • 2019/0118/資料庫正規化
      • 2019/0121/計概IT分工&資料庫正規化
      • 2019/0122/網路層&CSS父子容器切版
      • 2019/0123/Access資料庫關聯&CSS position&偵錯
      • 2019/0124/C#宣告、指定運算子
      • 2019/0125/VM虛擬機_基礎介紹
      • 2019/0128/VM虛擬機架設_虛擬網卡設定&伺服器權限設置
      • 2019/0129/Wireshark查詢網路層&資料庫物件導向
      • 2019/0130/ERmod雞爪圖&C#if、for時間複雜度
      • 2019/0131/C#流程控制&變數型別
    • 201902
      • 2019/0201/系統分析與設計_資料庫ERmod&c#Homework
      • 2019/0211/ASP.NET_Webforms&物件命名空間
      • 2019/0212/定址&網路遮罩
      • 2019/0213/SQLSeverM.S.介紹&AspWebforms表單控制項
      • 2019/0214/網概乙太網路&網路安全
      • 2019/0215/Pre Javascript 基礎 & 在職班補充
      • 2019/0218/TSQL基本指令&ASP.net左右置換表格/驗證傳值
      • 2019/0219/Javascript終極密碼&musicplay&asp.net驗證器
      • 2019/0220/SS基本語法&網概line機器人
      • 2019/0221/前端Javascript musicplay、內聚力耦合率
      • 2019/0222/前端Javascript musicplay、內聚力耦合率&伺服器權限
      • 2019/0223/SqlServerHomework&第一次專案報告
      • 2019/0225/SS合併查詢&ASP.NET驗證器
      • 2019/0226/伺服器ntfs安全性權限/共用權限
      • 2019/0227/Javascript_music_play_end&ASP.net串聯SQL(datasource就是拿來串SQLServer的)
    • 201903
      • 2019/0304/SS集合運算/子查詢/exists&asp.net GridView 事件 OnRowDataBound
      • 2019/0305/SS查詢式end&ASP.NET_Gridview_自訂樣式分頁
      • 2019/0306/Javascript musicplay_really_end
      • 2019/0307/前端HTML5鑲嵌字型&伺服器網域概念
      • 2019/0308/Android Studio_基礎概念&開發環境建置
      • 2019/0311/胡中興 工業4.0講習
      • 2019/0312/安卓系統_開發基礎介紹
      • 2019/0313/安卓工作室_基礎/布局內元件
      • 2019/0314/Asp.net鏈結資料庫-查詢
      • 2019/0315/SQS DML&第二次專案報告
      • 2019/0318/SQL DDL & 伺服器 自學基礎
      • 2019/0319/Android Studio_布局內元件&佈局規劃元件
      • 2019/0320/SQL檢視表&tsql基礎&Asp.net_Gridview
      • 2019/0321/TSQL&TDM&ASP.NET_Datalist
      • 2019/0322/DOM&JQ基礎&系統分析設計PPT&在職班補充
      • 2019/0325/TMD&Asp.net上傳圖片/產生QRCode
      • 2019/0326/SQLServer_預存程序+函數&Asp.net_Webforms半自動鏈結資料庫與自動化更新
      • 2019/0327/安卓工作室_佈局規劃元件
      • 2019/0328/jQuery選擇器應用&Ajax導讀+應用&asp.net串sserver_註冊帳號功能
      • 2019/0329/ADDS伺服器架設&第三次專題報告
    • 201904
      • 2019/0401/SQL觸發程序&Asp.net自動寄信&認證信
      • 2019/0402/前端作業四-jQ應用轉換樣式&ASP.NET_FormView控制項-會員資料維護實例
      • 2019/0403/JQ事件動畫&股市&Usecase
      • 2019/0408/安卓工作室_元件/布局基本end
      • 2019/0409/安卓工作室-物件導向事件驅動實作+Homework1&2
      • 2019/0410/上午小組討論-作品集自習&Visual studio webform+MVC範本
      • 2019/0411/安卓工作室-UI觸發委派函式與控制物件
      • 2019/0412/JQ動畫實做(寶可夢遊戲開場)&第四次專題報告
      • 2019/0415/前端JQ-Ajax+JSON&後端ADO建置、主板頁面概念控制項、Bootstrap演示
      • 2019/0416/安卓工作室UI控件案例結束、IDE Eclipse_Java物件導向基礎
      • 2019/0417/伺服器網域ADDNS&416LINE討論
      • 2019/0418/SQL指標、索引&Use cace
      • 2019/0419/主頁、Webform ADO.NET Entity Fromwork 增刪修實作&第五次專題報告
      • 2019/0423/Java基礎(型別/溢位/自動強制型別轉換/鑄造物件/串流/)&I/O物件用法(底層/較不底層)
      • 2019/0424/Bootstrap_RWD基礎/應用&Asp.Net_MVC實作增刪修(修待補)
      • 2019/0425/伺服器IIS安裝&資料匯入與管理
      • 2019/0426/Asp.Net_MVC增刪修實作(補修)&bootstrap – gridsystem– 網格系統&第六次專題報告&全國技能競賽網頁設計
      • 2019/0429/物件導向技術原理方法實作
      • 2019/0430/資料庫設計應用效能調教_SQL all end&ASP.NET_MVC_Controller單元_純C無V無M操作/簡單複雜繫結
    • 201905
      • 2019/0501/內部網站辨識&外部DNS域名/IP+自架DNS伺服器理解
      • 2019/0502/Java語言基礎、物件導向基礎
      • 2019/0503/Asp.net泛型處理常式驗證圖片應用&第七次專題報告Usecase
      • 2017/0506/Bs_FlexBox&Asp.Net_MVC_View+Razor@+Viewbag+helper
      • 2019/0507/Java 物件導向_類別+函式觀念&階段性作業三
      • 2019/0508/Asp.Net_MVC_Model_ADO.NET+Entityframework+LoginMember實作+MVC觀念
      • 2019/0509/Java物件導向(函式)_儲存型態+回傳值+多載+自制+例外處理+this參照+存取+複合
      • 20919/0510/第八次專題報告=功能DEMO
      • 2019/0514/Java_靜態類別+繼承特性
      • 2019/0515/RWD Utility+Card&MVC ViewModel+CRUD(RD)
      • 2019/0516/BS form&驗證+JQ驗證 & MVC_CRUD(CU)
      • 2019/0517/ASP.NET Webform介紹Master page 主頁 & Session 簡介 & 登入login驗證 & 隱碼攻擊injection & 工具箱程式碼片段使用
      • 2019/0520/繼承&存取權特性+java作業四+字符串格式化+多形+抽象類別
      • 2019/0521/抽象類別+介面
      • 2019/0522/Bootstrap Components 元件介紹 + MVC API 概念&實作
      • 2019/0523/IIS IP限制&ASP.NET部屬
      • 2019/0524/WebApi異質程式連線方式&第九次專題報告_循序圖
      • 2019/0528/Bootstrap Components 元件介紹 + MVC 登入驗證 + 商品加入購物車 實作
      • 2019/0529/ASP.NET_MVC購物車訂單功能完成+BootstrapComponents元件介紹
      • 2019/0530/原本是伺服器的課,但拿來做專題。
      • 2019/0531/ASP.NET_WebformAllView物件功能清單&ListView實作&第十次專案報告(完整循序圖)
    • 201906
      • 2019/0603/Bootstrap Components RWD End + ASP.NET_MVC Part2 PhotoSharing CodeFirst & Model 驗證
      • 2019/0604/ASP.NET_MVC Part2 PhotoSharing Controller & Filter & ADO.NET & View@RAZOR Helper
      • 2019/0605/Java介面實作&結束+安卓工作室(整合Layout與Java)Intent意圖&Bundle包裹
      • 2019/0606/第十一次專案報告功能demo+SingnaIR+伺服器作業+端午歌唱比賽
      • 2019/0609/黃大神傳授Visual_Studio&除錯技巧
      • 2019/0610/番外篇 Web Socket 即時連線& 就業前準備與技巧
      • 2019/0611/安卓工作室_(意圖+隱含意圖)資料傳遞+Android生命週期+硬體裝置與應用
      • 2019/0612/WebSockets Notification + MVC Part2 PhotoSharing PartialView & ADO.NET & EntitySQL & VMd
      • 2019/0613/MVC Part2 PhotoSharing ViewModel & ErrorHandle
      • 2019/0614/第十二次專案報告 功能Demo
      • 2019/0618/MVC Part2 PhotoSharing Route & Sitemap & _LayOut & AJAX
      • 2019/0618/RWD在職班_(Javascript_object-oriented programming)
      • 2019/0619/安卓工作室_(硬體裝置與應用)相機操作&GPS+階段性作業6+延伸 ( APP End )
      • 2019/0620/MVC補充C#MS SQL匯入CSV+上傳CSV存入MS SQL
      • 2019/0621/第十三次專案報告 功能Demo
    • 2019/0701/最終專案報告
    • 2019/0702/結訓與家人遊台東預計0708開始找工作自學筆記應該會等工作穩定後繼續開始
  • 自學里程碑
    • 201901
      • 2019/0107/DR
      • 2019/0108/UW
      • 2019/0103/Git
      • 2019/0103/CS
      • 2019/0115/Vscode
      • 2019/0116/JSON&AJAX
      • 2019/0122/卡內基
      • 2019/0126/MBTI
      • 2019/0131/PDP 外在 內在
    • 201902
      • 2019/0217/huli_half Developer
      • 2019/0219/SEO
      • 2019/0219/雪球速讀法
    • 201903
      • 2019/0304/asp、php、jsp、asp.net、net. Framework、asp.net core
      • 2019/0329/網站架站初嘗試
    • 201904
      • 2019/0415/Datatype-Explanation
      • 2019/0416/ASP.NET_Webform&Core&MVC(MVVM/MVP)
    • 201905
      • 2019/0613/開發職訓局共同專案時遇到的問題與解法
      • 2019/0514/ASP.NET SignalR
      • 2019/0514/JS擴展-JQ、React、Vue、Angular...
      • 2019/0514/Sass&Scss
      • 2019/0514/MVC結合Webform
      • 2019/0515/ASP.NET MVC_TempData/ViewData/ViewBag
      • 2019/0522/[自學筆記]海綿體啟蒙??
Powered by GitBook
On this page
  • #Java類別&物件
  • ##Static 類別成員
  • ##靜態類別匯入
  • #繼承
  • ##直接間接父類別
  • ##類別在使用上有兩種狀態
  • ##向上轉型
  • ##繼承-存取權
  • ##在不夠熟悉時 通常是實作兩個子類別最後再把相同之處往上搬制做父類別
  • ##建構子不會被繼承
  • ##不標記@Override也會複寫但最好要加上去
  • ##繼承的使用
  • #子類別呼叫父類別建構式
  • ##初始化new父輩實體變數(參數) super , c#裡面是base
  • ##繼承重點
  • ##參數使用保護繼承的問題

Was this helpful?

  1. 職訓局里程碑
  2. 201905

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

Previous20919/0510/第八次專題報告=功能DEMONext2019/0515/RWD Utility+Card&MVC ViewModel+CRUD(RD)

Last updated 6 years ago

Was this helpful?

#Java類別&物件

##Static 類別成員

呼叫 ex: Math.PI

不能存取非Static類別成員

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

###目的

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

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

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

使用靜態方法方式

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

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

### EmployeeS

package com.example.java;

public class EmployeeS {

	private static int count = 0; // number of Employees created

	private String firstName;
	private String lastName;
	public Date birthDate;
	public Date hireDate;

	public EmployeeS(String firstName, String lastName,Date birthDate, Date hireDate) {
		this.firstName = firstName;
		this.lastName = lastName;
		this.birthDate = birthDate;
		this.hireDate = hireDate;

		++count;
		System.out.printf("EmployeeS 物件建立成功 : %s %s; EmployeeS物件數量 = %d%n", firstName, lastName, count);
	}

	public String getFirstName() {
		String strTemp = String.valueOf(this.count);
		return firstName+strTemp;
	}

	public String getLastName() {
		return lastName;
	}

	public static int getCount() {
//		String s1= firstName;
//		String s2;
//		s2 = getFirstName();
		return count;
	}

	public String toString() {
		return String.format("%s,%s-雇用日期: %s-出生日期: %s", lastName, firstName, hireDate, birthDate);
	}

}

### EmployeeSTest

package com.example.java;

public class EmployeeSTest {

	public static void main(String[] args) {
		// TODO 自動產生的方法 Stub

		System.out.printf("新增員工前, EmployeeS物件數量: %d%n", EmployeeS.getCount());

		Date birth = new Date(7, 24, 2005);
		Date hire = new Date(3, 12, 2016);
		EmployeeS e1 = new EmployeeS("李", "連杰", birth, hire);
		EmployeeS e2 = new EmployeeS("甄", "子丹", birth, hire);

		System.out.printf("%n新增員工後, EmployeeS物件數量:%n");
		System.out.printf("呼叫  EmployeeS.getCount(): %d%n", EmployeeS.getCount());

		System.out.printf("%n員工 1: %s %s%n員工2: %s %s%n", e1.getFirstName(), e1.getLastName(), e2.getFirstName(),
				e2.getLastName());

		System.out.println(e1);
	}

}

##靜態類別匯入

Import 在 c#就是using

### StaticImportTest.java

package com.example.java;

import static java.lang.Math.*;
//import static java.lang.Math.sqrt;
//import static java.lang.Math.ceil;

public class StaticImportTest {

	public static void main(String[] args) {
		// TODO 自動產生的方法 Stub
		
	      System.out.printf("呼叫 Math.sqrt,sqrt(900.0) = %.1f%n", sqrt(900.0));
	      System.out.printf("呼叫 Math.ceil,ceil(-9.8) = %.1f%n", ceil(-9.8));
	      System.out.printf("呼叫 Math.E,E = %f%n",  java.lang.Math.E);
	      System.out.printf("呼叫 Math.PI,PI = %f%n", java.lang.Math.PI);

	}

}

#繼承

##特殊化specialization

##直接間接父類別

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

##間接父類別 indirect superclass

java元祖類別為 object

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

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

Is a relationship

###繼承

Has a relationship

###複合

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

##向上轉型

一般化往上移 ( 通用

特性化往下移

##繼承-存取權

Private 必須要在同一個 class 裡面

Protected 要有繼承關係或同個packge

##Entends 繼承

###CommissionEmployee.java

package com.example.java;

public class CommissionEmployee extends Object{
	
	   private final String firstName;                        
	   private final String lastName;                         
	   private final String idNumber;             
	   private double grossSales; 
	   private double commissionRate; // 佣金,抽庸的比例
	                                
	   public CommissionEmployee(String firstName, String lastName, String idNumber, double grossSales, double commissionRate)
	   {                                                                  
	      if (grossSales < 0.0) 
	         throw new IllegalArgumentException("銷售金額必須 >= 0.0");

	      if (commissionRate <= 0.0 || commissionRate >= 1.0)
	         throw new IllegalArgumentException("佣金比例必須 > 0.0 and < 1.0");

	      this.firstName = firstName;                                     
	      this.lastName = lastName;                                    
	      this.idNumber = idNumber;         
	      this.grossSales = grossSales;
	      this.commissionRate = commissionRate;
	   } 

	   public String getFirstName()
	   {
	      return firstName;
	   }

	   public String getLastName()
	   {
	      return lastName;
	   } 

	   public String getIdNumber()
	   {
	      return idNumber;
	   } 

	   public void setGrossSales(double grossSales)
	   {
	      if (grossSales < 0.0) 
	         throw new IllegalArgumentException("銷售金額必須 >= 0.0");

	      this.grossSales = grossSales;
	   } 

	   public double getGrossSales()
	   {
	      return grossSales;
	   } 

	   public void setCommissionRate(double commissionRate)
	   {
	      if (commissionRate <= 0.0 || commissionRate >= 1.0)
	         throw new IllegalArgumentException("Commission rate must be > 0.0 and < 1.0");

	      this.commissionRate = commissionRate;
	   } 

	   public double getCommissionRate()
	   {
	      return commissionRate;
	   } 
	        
	   public double earnings()              
	   {                                     
	      return commissionRate * grossSales;
	   } 

	   @Override
	   public String toString()                                             
	   {                                                                    
	      return String.format("%s: %s %s%n%s: %s%n%s: %.2f%n%s: %.2f %n%s: %.2f" ,    
	         "領佣金的員工姓名", firstName, lastName,                    
	         "身分證字號", idNumber,                
	         "每周銷售金額", grossSales,                                     
	         "佣金比例", commissionRate,
	         "薪資",this.earnings());                           
	   } 

}

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

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

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

### CommissionEmployeeTest.java

package com.example.java;

public class CommissionEmployeeTest {

	public static void main(String[] args) {
		// TODO 自動產生的方法 Stub
		
		CommissionEmployee employee01 = new CommissionEmployee("劉", "德華", "A123456789", 10000, .06);
		CommissionEmployee employee02 = new CommissionEmployee("陳", "立農", "A123456789", 5000, .1);

		System.out.println("以下呼叫 Get Method 取回員工資料:");
		System.out.printf("%n%s %s%n", "姓:", employee01.getFirstName());
		System.out.printf("%s %s%n", "名:", employee01.getLastName());
		System.out.printf("%s %s%n", "身分證字號:", employee01.getIdNumber());
		System.out.printf("%s %.2f%n", "銷售金額:", employee01.getGrossSales());
		System.out.printf("%s %.2f%n", "佣金比例:", employee01.getCommissionRate());
		
		employee01.setGrossSales(15000);
		employee01.setCommissionRate(.65);

		System.out.printf("%n%s:%n%n%s%n", "更新員工資料後,呼叫 toString Method 取回員工資料:", employee01);
		System.out.printf("%n%s:%n%n%s%n", "第二位員工資料", employee02.toString());


		
	}

}

##建構子不會被繼承

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

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

###BasePlusCommissionEmployee.java

##減少重複程式碼

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

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

##繼承的使用

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

(BasePlusCommissionEmployee、CommissionEmployee

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

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

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

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

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

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

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

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

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

package com.example.java;

public class CommissionEmployeeExtV1 extends Object{
	
	   private final String firstName;                        
	   private final String lastName;                         
	   private final String idNumber;             
	   private double grossSales; 
	   private double commissionRate; // 佣金,抽庸的比例
	                                
	   public CommissionEmployeeExtV1(String firstName, String lastName, String idNumber, double grossSales, double commissionRate)
	   {                                                                  
	      if (grossSales < 0.0) 
	         throw new IllegalArgumentException("銷售金額必須 >= 0.0");

	      if (commissionRate <= 0.0 || commissionRate >= 1.0)
	         throw new IllegalArgumentException("佣金比例必須 > 0.0 and < 1.0");

	      this.firstName = firstName;                                     
	      this.lastName = lastName;                                    
	      this.idNumber = idNumber;         
	      this.grossSales = grossSales;
	      this.commissionRate = commissionRate;
	   } 

	   public String getFirstName()
	   {
	      return firstName;
	   }

	   public String getLastName()
	   {
	      return lastName;
	   } 

	   public String getIdNumber()
	   {
	      return idNumber;
	   } 

	   public void setGrossSales(double grossSales)
	   {
	      if (grossSales < 0.0) 
	         throw new IllegalArgumentException("銷售金額必須 >= 0.0");

	      this.grossSales = grossSales;
	   } 

	   public double getGrossSales()
	   {
	      return grossSales;
	   } 

	   public void setCommissionRate(double commissionRate)
	   {
	      if (commissionRate <= 0.0 || commissionRate >= 1.0)
	         throw new IllegalArgumentException("佣金比例必須 > 0.0 and < 1.0");

	      this.commissionRate = commissionRate;
	   } 

	   public double getCommissionRate()
	   {
	      return commissionRate;
	   } 
	        
	   public double earnings()              
	   {                                     
	      return commissionRate * grossSales;
	   } 

	   @Override
	   public String toString()                                             
	   {                                                                    
	      return String.format("%s: %s %s%n%s: %s%n%s: %.2f%n%s: %.2f %n%s: %.2f" ,    
	         "領佣金的員工姓名", firstName, lastName,                    
	         "身分證字號", idNumber,                
	         "每周銷售金額", grossSales,                                     
	         "佣金比例", commissionRate,
	         "薪資",this.earnings());                           
	   } 

}

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

package com.example.java;

public class BasePlusCommissionEmployeeExtV1 extends CommissionEmployeeExtV1{
	
	   private double baseSalary; //底薪
	                                
	   public BasePlusCommissionEmployeeExtV1(String firstName, String lastName, String idNumber, double grossSales, double commissionRate,double baseSalary)
	   {                                                                  
	      super(firstName,lastName,idNumber,grossSales,commissionRate);
		   
	      if (baseSalary < 0.0)                      
	          throw new IllegalArgumentException("底薪金額必須 >= 0.0");       

	      this.baseSalary = baseSalary;
	   } 
   
	   public void setBaseSalary(double baseSalary)
	   {
	      if (baseSalary < 0.0)
	         throw new IllegalArgumentException("底薪金額必須 >= 0.0");

	      this.baseSalary = baseSalary;
	   } 

	   public double getBaseSalary()
	   {
	      return baseSalary;
	   } 
	        
	   @Override
	   public double earnings()              
	   {                                     
	      return baseSalary + (super.getCommissionRate() * super.getGrossSales());
	   } 

	   @Override
	   public String toString()                                             
	   {                                                                    
	      return String.format("%s: %s %s%n%s: %s%n%s: %.2f%n%s: %.2f %n%s: %.2f" ,    
	         "領佣金的員工姓名", super.getFirstName(),  super.getLastName(),                    
	         "身分證字號", super.getIdNumber(),                
	         "每周銷售金額", getGrossSales(),                                     
	         "佣金比例", getCommissionRate(),
	         "底薪金額", baseSalary);                           
	   } 

}

### BasePlusCommissionEmployeeExtV1Test

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

package com.example.java;

public class BasePlusCommissionEmployeeExtV1Test {

	public static void main(String[] args) {
		// TODO 自動產生的方法 Stub
		
		BasePlusCommissionEmployeeExtV1 employee01 = new BasePlusCommissionEmployeeExtV1("劉", "德華", "A123456789", 10000, .06,1000);
		CommissionEmployeeExtV1 employee02 = new CommissionEmployeeExtV1("陳", "立農", "A123456789", 5000, .1);

		System.out.println("以下呼叫 Get Method 取回員工資料:");
		System.out.printf("%n%s %s%n", "姓:", employee01.getFirstName());
		System.out.printf("%s %s%n", "名:", employee01.getLastName());
		System.out.printf("%s %s%n", "身分證字號:", employee01.getIdNumber());
		System.out.printf("%s %.2f%n", "銷售金額:", employee01.getGrossSales());
		System.out.printf("%s %.2f%n", "佣金比例:", employee01.getCommissionRate());
		System.out.printf("%s %.2f%n", "底薪金額:", employee01.getBaseSalary());
		
		employee01.setGrossSales(15000);
		employee01.setCommissionRate(0.1);
		employee01.setBaseSalary(2000);

		System.out.printf("%n%s:%n%n%s%n", "更新員工資料後,呼叫 toString Method 取回員工資料:", employee01);
		System.out.printf("總薪資:"+String.valueOf(employee01.earnings()));

		System.out.println("\n\n領獎金員工資料:");
		System.out.printf("%n%s:%n%n%s%n", "呼叫 toString Method 取回員工資料:", employee02);
		
	}

}

##繼承重點

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

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

接著 V2版本

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

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

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

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

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

###CommissionEmployeeExtV2

package com.example.java;

public class CommissionEmployeeExtV2 extends Object{
	
	   protected final String firstName;                        
	   protected final String lastName;                         
	   protected final String idNumber;             
	   protected double grossSales; 
	   protected double commissionRate; // 佣金,抽庸的比例
	                                
	   public CommissionEmployeeExtV2(String firstName, String lastName, String idNumber, double grossSales, double commissionRate)
	   {                                                                  
	      if (grossSales < 0.0) 
	         throw new IllegalArgumentException("銷售金額必須 >= 0.0");

	      if (commissionRate <= 0.0 || commissionRate >= 1.0)
	         throw new IllegalArgumentException("佣金比例必須 > 0.0 and < 1.0");

	      this.firstName = firstName;                                     
	      this.lastName = lastName;                                    
	      this.idNumber = idNumber;         
	      this.grossSales = grossSales;
	      this.commissionRate = commissionRate;
	   } 

	   public String getFirstName()
	   {
	      return firstName;
	   }

	   public String getLastName()
	   {
	      return lastName;
	   } 

	   public String getIdNumber()
	   {
	      return idNumber;
	   } 

	   public void setGrossSales(double grossSales)
	   {
	      if (grossSales < 0.0) 
	         throw new IllegalArgumentException("銷售金額必須 >= 0.0");

	      this.grossSales = grossSales;
	   } 

	   public double getGrossSales()
	   {
	      return grossSales;
	   } 

	   public void setCommissionRate(double commissionRate)
	   {
	      if (commissionRate <= 0.0 || commissionRate >= 1.0)
	         throw new IllegalArgumentException("佣金比例必須 > 0.0 and < 1.0");

	      this.commissionRate = commissionRate;
	   } 

	   public double getCommissionRate()
	   {
	      return commissionRate;
	   } 
	        
	   public double earnings()              
	   {                                     
	      return commissionRate * grossSales;
	   } 

	   @Override
	   public String toString()                                             
	   {                                                                    
	      return String.format("%s: %s %s%n%s: %s%n%s: %.2f%n%s: %.2f %n%s: %.2f" ,    
	         "領佣金的員工姓名", firstName, lastName,                    
	         "身分證字號", idNumber,                
	         "每周銷售金額", grossSales,                                     
	         "佣金比例", commissionRate,
	         "薪資",this.earnings());                           
	   } 

}

###BasePlusCommissionEmployeeExtV2

package com.example.java;

public class BasePlusCommissionEmployeeExtV2 extends CommissionEmployeeExtV2 {

	protected double baseSalary; // 底薪

	public BasePlusCommissionEmployeeExtV2(String firstName, String lastName, String idNumber, double grossSales,double commissionRate, double baseSalary) {
		super(firstName, lastName, idNumber, grossSales, commissionRate);

		if (baseSalary < 0.0)
			throw new IllegalArgumentException("底薪金額必須 >= 0.0");

		this.baseSalary = baseSalary;
	}

	public void setBaseSalary(double baseSalary) {
		if (baseSalary < 0.0)
			throw new IllegalArgumentException("底薪金額必須 >= 0.0");

		this.baseSalary = baseSalary;
	}

	public double getBaseSalary() {
		return baseSalary;
	}

	@Override
	public double earnings() {
		grossSales = -5000.0;
		return baseSalary + (commissionRate * grossSales);
	}

	@Override
	public String toString() {
	      return String.format("%s: %s %s%n%s: %s%n%s: %.2f%n%s: %.2f %n%s: %.2f" ,    
	 	         "領佣金的員工姓名", firstName, lastName,                    
	 	         "身分證字號", idNumber,                
	 	         "每周銷售金額", grossSales,                                     
	 	         "佣金比例", commissionRate,
	 	         "底薪金額", baseSalary);
	}

}

###BasePlusCommissionEmployeeExtV2Test

package com.example.java;

public class BasePlusCommissionEmployeeExtV2Test {

	public static void main(String[] args) {
		// TODO 自動產生的方法 Stub
		
		BasePlusCommissionEmployeeExtV2 employee01 = new BasePlusCommissionEmployeeExtV2("劉", "德華", "A123456789", 10000, .06,1000);
		CommissionEmployeeExtV2 employee02 = new CommissionEmployeeExtV2("陳", "立農", "A123456789", 5000, .1);

		System.out.println("以下呼叫 Get Method 取回員工資料:");
		System.out.printf("%n%s %s%n", "姓:", employee01.getFirstName());
		System.out.printf("%s %s%n", "名:", employee01.getLastName());
		System.out.printf("%s %s%n", "身分證字號:", employee01.getIdNumber());
		System.out.printf("%s %.2f%n", "銷售金額:", employee01.getGrossSales());
		System.out.printf("%s %.2f%n", "佣金比例:", employee01.getCommissionRate());
		System.out.printf("%s %.2f%n", "底薪金額:", employee01.getBaseSalary());
		
		employee01.setGrossSales(15000);
		employee01.setCommissionRate(0.1);
		employee01.setBaseSalary(2000);

		System.out.printf("%n%s:%n%n%s%n", "更新員工資料後,呼叫 toString Method 取回員工資料:", employee01);
		System.out.printf("總薪資:"+String.valueOf(employee01.earnings()));

		System.out.println("\n\n領獎金員工資料:");
		System.out.printf("%n%s:%n%n%s%n", "呼叫 toString Method 取回員工資料:", employee02);
		
	}

}

Java 什麼是多載(Overload), 覆寫(Override), 多型(Polymorphism)
Logo
java super c# - Google SearchGoogle
Logo
Java Platform SE 7
Logo