普通類實現列舉與抽象類的應用比較
當我們想實現一個星期幾的列舉時候我們自己編寫一個類來實現!如果我們用實體類的程式碼如下:
package com.jemsn.weekday; public class WeekDay { //建構函式私有化 讓別人不可以再建立新的物件例項 private WeekDay () {} public static final WeekDay MonDay=new WeekDay(); public static final WeekDay Tuesay=new WeekDay(); public static final WeekDay WendsDay=new WeekDay(); public static final WeekDay ThusDay=new WeekDay(); public static final WeekDay FriDay=new WeekDay(); public static final WeekDay StaDay=new WeekDay(); public static final WeekDay SunDay=new WeekDay(); //如果我們要一個NextDay()方法 public WeekDay NextDay() { if(this==MonDay){ return Tuesay; }else if(this==Tuesay){ return WendsDay; } else if(this==WendsDay){ return ThusDay; } else if(this==ThusDay){ return FriDay; } else if(this==FriDay){ return StaDay; } else if(this==StaDay){ return SunDay; }else { return MonDay; } } //重寫ToString方法 public String toString() { return this==MonDay?"星期一":this==Tuesay?"星期二":this==WendsDay?"星期三":this==ThusDay?"星期四":"星期五"; } }
然後我們在測試程式碼裡呼叫它:
package com.jemsn.weekday;
public class test {
public static void main(String[] args) {
WeekDay monday=WeekDay.MonDay;
WeekDay tuesday=WeekDay.Tuesay;
System.out.println(monday.NextDay());
System.out.println(tuesday.NextDay());
}
}
輸出結果如下:
-----------------------------------------------------------------------
星期二
星期三
-----------------------------------------------------------------------
上面的程式碼我們可以看出,在我們的NextDay方法中用了一大堆的if else else if 之類的,如果我們裝基改為抽象類,如下程式碼:
package com.jemsn.weekday; public abstract class WeekDay { //建構函式私有化 讓別人不可以再建立新的物件例項 private WeekDay () {} public static final WeekDay MonDay=new WeekDay(){ public WeekDay NextDay() { return WeekDay.Tuesay; } }; //採用了匿名內部類的實現方式 public static final WeekDay Tuesay=new WeekDay(){ public WeekDay NextDay() { return WeekDay.WendsDay; } }; public static final WeekDay WendsDay=new WeekDay(){ public WeekDay NextDay() { return WeekDay.ThusDay; } }; public static final WeekDay ThusDay=new WeekDay(){ public WeekDay NextDay() { return WeekDay.FriDay; } }; public static final WeekDay FriDay=new WeekDay(){ public WeekDay NextDay() { return WeekDay.StaDay; } }; public static final WeekDay StaDay=new WeekDay(){ public WeekDay NextDay() { return WeekDay.SunDay; } }; public static final WeekDay SunDay=new WeekDay(){ public WeekDay NextDay() { return WeekDay.MonDay; } }; //如果我們要一個NextDay()方法 public abstract WeekDay NextDay(); //重寫ToString方法 public String toString() { return this==MonDay?"星期一":this==Tuesay?"星期二":this==WendsDay?"星期三":this==ThusDay?"星期四":"星期五"; } }
上面的程式碼中我們將if else分別轉化成了一個個獨立的類,測試程式碼不變,輸出的結果如下 :
-----------------------------------------------------------------------
星期二
星期三
-----------------------------------------------------------------------
我們看到的還是一樣,但是實現的方式卻完全不一樣!所以我們可以總結用抽象方法結合匿名內部類實現比統一的更加好!
相關推薦
普通類實現列舉與抽象類的應用比較
當我們想實現一個星期幾的列舉時候我們自己編寫一個類來實現!如果我們用實體類的程式碼如下: package com.jemsn.weekday; public class WeekDay { //建構函式私有化 讓別人不可以再建立新的物件例項 private WeekD
十一、接口(接口的概念,實現,繼承,實現)、抽象類與抽象方法(抽象類,抽象方法概念,使用)
輸出 重寫 關鍵字 new clas main ride ring strac 接口 接口是一種用來定義程序的協議,它描述可屬於任何類和結構的一組相關行為。 接口可由方法、屬性、事件和索引器這四種成員類型的任何組合構成,但不能包含字段。 接口通過類繼承來實現,一個類雖然只能
DateFormat抽象類實現日期與字符串的轉換
println format 實例化 都是 對象 col 我們 sdf 當前日期 【需求】日期是可以計算的,而日期字符串無法計算。 由於DateFormat是抽象類,我們一般都是用的它的子類SimpleDateFormat。 【SimpleDateFormat構造方法】 1
java中介面與抽象類異同點與在專案中的應用
1包 作用: 管理類 定義: package 包名; package必須作為原始檔 的第一條語句 包名的命名規則 使用其他包中的類 完整類名 先import匯入類,再使用 2 Eclipse 3 訪問許可權 類的訪問許可權: 公共類, 非公共類 公共類的應用場景
介面與抽象類的繼承和實現關係
參考:https://blog.csdn.net/hudfang/article/details/50556277 //c++多繼承與多層繼承 參考:https://blog.csdn.net/Lingfeng928/article/details/51917955  
interface 與abstract class(介面 與 抽象類)的特點以及區別,以及應用場景
一、抽象類(abstract) 1、抽象類不能被例項化,如果例項化就會報錯,編譯無法通過。只有抽象類的非抽象子類可以建立物件。 2、抽象類中不一定含有抽象方法,但是有抽象方法的類一定是抽象類。 3、抽象類中的抽象方法只能宣告,不包含方法體,就是不會給出方法的具體實現
抽象方法與抽象類
log true 需要 ffi 實例化 bst () 實例 abs 關鍵字:abstract 抽象方法: 使用abstract關鍵字修飾的方法就是抽象方法, 抽象方法只有方法聲明,沒有方法實現, 實現抽象方法需要重寫
C# 接口與抽象類
虛方法 聲明 bsp 抽象類 抽象 類繼承 strac 應該 str (1)抽象類使用abstract關鍵字進行定義,接口使用interface關鍵字定義,他們都不能進行實例化。 (2)抽象類中可以包含虛方法、非抽象方法、靜態成員;接口中不能包括虛方法、任何靜態成員 並
第十二章 多態性與抽象類
mil 虛構函數 函數聲明 關聯 抽象類 表示 純虛函數 首部 定義 第十二章 多態與虛函數 一、多態的概念 向不同的對象發送同一個消息,不同的對象在接收時會產生不同的行為 具有不同功能的函數名可以用同一個函數名,以實現用一個函數名調用不同內容的函數 *靜態多態和動態多態(
【知了堂學習筆記】java 接口與抽象類
表現 lar images 例子 然而 編寫 targe 無法 abstract 本次主角:抽象類 、接口。 對於皮皮瀟這樣一類的Java初學者來說,接口和抽象類如果不去花大量的精力與時間是很難弄清楚的,而我也是在最近這周的項目學習中感覺到了我對這兩個概念不熟悉,所以導致對
201671010127 2016—2017-2 接口與抽象類
靜態方法 ide 初始 ride 轉換 ont trac 函數 ceo 接口就是一個規範,類似於硬件上面的接口,在電腦主板上的PCI插槽的規範就類似於Java接口,只要是遵循PCI接口的卡,不過是什麽牌子的都可以插入到PCI插槽中。所以接口就是一個規範。接口就是某個事物
(轉)Java接口與抽象類的區別
構造 request 現在 exceptio 創建 使用 javac 不存在 serializa 很多常見的面試題都會出諸如抽象類和接口有什麽區別,什麽情況下會使用抽象類和什麽情況你會使用接口這樣的問題。本文我們將仔細討論這些話題。 在討論它們之間的不同點之前,我們先看
C++中繼承與抽象類
post dog urn 針對 delet rtu 繼承 prot virt 繼承語法格式如下: class 子類名稱 : 繼承方式(public private protected 三種) 父類名稱 純虛函數格式: virtual 返回值類型 函數名(參數列表)= 0;含
Java基礎10 接口的繼承與抽象類
happy strac list new 另一個 eat foo 覆蓋 toolbar 作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉載,也請保留這段聲明。謝謝! 在實施接口中,我們利用interface語法,將interf
接口與抽象類區別
根據 多個 ima 繼承關系 style 訪問 interface 修飾符 子類 抽象類:往往用來表征我們對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但本質上相同的具體概念的抽象。(面向對象的概念中,所有的對象都是通過類來描繪的。但是,並不是所有的類都是
對php的接口類與抽象類的理解
代碼復用 bst ID lang 是什麽 提供服務 truct 參數 lock php 接口類:interface 使用接口(interface),可以指定某個類必須實現哪些方法,但不需要定義這些方法的具體內容。 接口是通過 interface 關鍵字來定義的,就像定義
接口與抽象類的區別?區別就是抽象類已經(漸漸地漸漸地)不用了.
ima TP 不用 區別 inf com 技術 alt 接口 如能接口,何須抽象. 接口與抽象類的區別?區別就是抽象類已經(漸漸地漸漸地)不用了.
第6篇 Java中的接口與抽象類
集合 conn event int str ckey 實現類 bst div 接口 Interface 在JAVA編程語言中是一個抽象類型,是抽象方法的集合。接口通常以interface來聲明。一個類通過實現接口(implements)的方式,從而實現接口的抽象方法。 接
JAVA中接口與抽象類
rac 構造 轉換 希望 就是 pub 成員變量 類型 規則 抽象類總結 抽象類的概念:是使用關鍵字abstract修飾的類就是抽象類; 抽象類的產生:當多個不能相互繼承的類具有相同的功能時,就需要將共同的信息向上抽取,放到公共的父類中;如果公共的父類只能描述所有子類都
C++——類的綜合案例——純虛函數與抽象類( 加強對接口與多態,以及派生類構造函數的理解 )
構造 set 由於 技術 als str wid choice gre 註意派生類構造函數的寫法。 1 #include <iostream> 2 3 using namespace std; 4 5 enum COLOR {