教面試官ReentrantLock源碼
796
2022-05-29
抽象類
用abstract關鍵字修飾的類,叫做抽象類
抽象類不能被實例化
抽象類是用來被繼承的
抽象類的子類必須要重寫父類的方法并提供方法體
抽象方法
用abstract關鍵字來修飾的方法,叫做抽象方法
抽象方法只有方法聲明,沒有實現方法,直接使用分號結尾,如:
public abstract void say();
1
如果一個類中含有抽象方法,那么這個類必須被聲明為抽象類
Tips:
abstract不能用來修飾變量、代碼塊和構造器
abstract不能用來修飾私有、靜態、final方法和final類
模板方法設計模式
通過子類繼承抽象類,抽象類可以作為多個子類的通用的模板,每一個子類必須重寫抽象類中的抽象方法,也可以進行拓展和改造,體現了一種模板模式的設計。
通過這種方法,可以在編寫一些部分內容很不確定容易改變的方法時,在父類中使用抽象方法寫好,再在子類中將這些易變的方法具體化實現。
練習:
編寫工資系統,實現不同類型員工(多態)的按月發放工資。如果當月出現某個
Employee對象的生日,則將該雇員的工資增加100元。
實驗說明:
(1)定義一個Employee類,該類包含:
private成員變量name,number,birthday,其中birthday 為MyDate類的對象;
abstract方法earnings();
toString()方法輸出對象的name,number和birthday。
(2)MyDate類包含:
private成員變量year,month,day ;
toDateString()方法返回日期對應的字符串:xxxx年xx月xx日
(3)定義SalariedEmployee類繼承Employee類,實現按月計算工資的員工處
理。該類包括:private成員變量monthlySalary;
實現父類的抽象方法earnings(),該方法返回monthlySalary值;toString()方法輸
出員工類型信息及員工的name,number,birthday。
(4)參照SalariedEmployee類定義HourlyEmployee類,實現按小時計算工資的
員工處理。該類包括:
private成員變量wage和hour;
實現父類的抽象方法earnings(),該方法返回wage*hour值;
toString()方法輸出員工類型信息及員工的name,number,birthday。
(5)定義PayrollSystem類,創建Employee變量數組并初始化,該數組存放各
類雇員對象的引用。利用循環結構遍歷數組元素,輸出各個對象的類
型,name,number,birthday,以及該對象生日。當鍵盤輸入本月月份值時,如果本
月是某個Employee對象的生日,還要輸出增加工資信息。
提示:
//定義People類型的數組People c1[]=new People[10];
//數組元素賦值
c1[0]=new People(“John”,“0001”,20);
c1[1]=new People(“Bob”,“0002”,19);
//若People有兩個子類Student和Officer,則數組元素賦值時,可以使父類類型的數組元素指向子類。
c1[0]=new Student(“John”,“0001”,20,85.0);
c1[1]=new Officer(“Bob”,“0002”,19,90.5);
數據結構 面向對象編程
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。