生活随笔
收集整理的這篇文章主要介紹了
Java 枚举:实现接口
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://blog.csdn.net/veryitman/article/details/7945949
所有的枚舉類都繼承自 Enum,因為 Java 不支持多繼承,所以枚舉無法繼承其它類。
但是,枚舉與普通類一樣,可以實現接口。
[java]?view plaincopyprint?
package?mark.demo;?? ?? public?class?EnumDemo?{?? ?? ????public?static?void?main(String[]?args)?{?? ????????for?(Color?color?:?Color.values())?{?? ????????????color.setColor();?? ????????}?? ????}?? ?????? ????interface?Paint?{?? ????????public?void?setColor();?? ????}?? ?? ????public?enum?Color?implements?Paint?{?? ????????RED("red?color",?0),??? ????????GREEN("green?color",?1),??? ????????BLUE("blue?color",?2),??? ????????YELLOW("yellow?color",?3);?? ?? ????????Color(String?name,?int?id)?{?? ????????????_name?=?name;?? ????????????_id?=?id;?? ????????}?? ?? ????????private?String?_name;?? ????????private?int?_id;?? ?? ????????public?String?getName()?{?? ????????????return?_name;?? ????????}?? ?? ????????public?int?getId()?{?? ????????????return?_id;?? ????????}?? ?? ?????????? ?????????? ?????????? ?????????? ?? ????????@Override?? ????????public?void?setColor()?{?? ????????????System.out.println("Current?paint?color:?"?+?_name);?? ????????}?? ????}?? }??
自定義接口 Paint,枚舉 Color 實現該接口。
試想一下,為 Paint 選擇 color 的同時是否可以指定 Paint 的類型呢?
那么,我們改造這個 Paint 接口:
[java]?view plaincopyprint?
interface?Paint?{?? ????????public?void?setColor();?? ?????????? ????????public?void?setType();?? ????}??
枚舉 Color 實現 Paint:
[java]?view plaincopyprint?
public?enum?Color?implements?Paint?{?? ????????RED("red?color",?0),??? ????????GREEN("green?color",?1),??? ????????BLUE("blue?color",?2),??? ????????YELLOW("yellow?color",?3);?? ?? ????????Color(String?name,?int?id)?{?? ????????????_name?=?name;?? ????????????_id?=?id;?? ????????}?? ?? ????????private?String?_name;?? ????????private?int?_id;?? ?? ????????public?String?getName()?{?? ????????????return?_name;?? ????????}?? ?? ????????public?int?getId()?{?? ????????????return?_id;?? ????????}?? ?? ?????????? ?????????? ?????????? ?????????? ?? ????????@Override?? ????????public?void?setColor()?{?? ????????????System.out.println("Current?paint?color:?"?+?_name);?? ????????}?? ?? ????????@Override?? ????????public?void?setType()?{?? ????????????System.out.println("Current?paint?type:?"?+?"How?to?determine??");?? ????????}?? ????}??
把這個問題具體化:
在選擇 RED 的同時,我想選擇類型為 5 號的 paint
在選擇 GREEN 的同時,我想選擇類型為?1 號的 paint,如何處理?
....
(這里只是為了說明枚舉的功能,不是為了更好的找到解決上述問題的方法,請勿跑題!)
在前面的博客?Java 枚舉:理解枚舉本質?中說到,
枚舉的常量值本質就是枚舉對象,那么我們可以采用匿名內部類來解決這個問題!
[java]?view plaincopyprint?
package?mark.demo;?? ?? public?class?EnumDemo?{?? ?? ????public?static?void?main(String[]?args)?{?? ????????for?(Color?color?:?Color.values())?{?? ????????????color.setColor();?? ????????????color.setType();?? ????????}?? ????}?? ?? ????interface?Paint?{?? ????????public?void?setColor();?? ?? ????????public?void?setType();?? ????}?? ?? ????public?enum?Color?implements?Paint?{?? ????????RED("red?color",?0)?{?? ????????????@Override?? ????????????public?void?setColor()?{?? ????????????????System.out.println("Current?paint?color:?"?+?RED._name);?? ????????????}?? ?? ????????????@Override?? ????????????public?void?setType()?{?? ????????????????System.out.println("Current?paint?type:?"?+?"5");?? ????????????}?? ????????},?? ????????GREEN("green?color",?1)?{?? ????????????@Override?? ????????????public?void?setColor()?{?? ????????????????System.out.println("Current?paint?color:?"?+?GREEN._name);?? ????????????}?? ?? ????????????@Override?? ????????????public?void?setType()?{?? ????????????????System.out.println("Current?paint?type:?"?+?"1");?? ????????????}?? ????????},?? ?? ????????BLUE("blue?color",?2)?{?? ????????????@Override?? ????????????public?void?setColor()?{?? ????????????????System.out.println("Current?paint?color:?"?+?BLUE._name);?? ????????????}?? ?? ????????????@Override?? ????????????public?void?setType()?{?? ????????????????System.out.println("Current?paint?type:?"?+?"12");?? ????????????}?? ????????},?? ????????YELLOW("yellow?color",?3)?{?? ????????????@Override?? ????????????public?void?setColor()?{?? ????????????????System.out.println("Current?paint?color:?"?+?YELLOW._name);?? ????????????}?? ?? ????????????@Override?? ????????????public?void?setType()?{?? ????????????????System.out.println("Current?paint?type:?"?+?"80");?? ????????????}?? ????????};?? ?? ????????Color(String?name,?int?id)?{?? ????????????_name?=?name;?? ????????????_id?=?id;?? ????????}?? ?? ????????private?String?_name;?? ????????private?int?_id;?? ?? ????????public?String?getName()?{?? ????????????return?_name;?? ????????}?? ?? ????????public?int?getId()?{?? ????????????return?_id;?? ????????}?? ????}?? ?? }??
為了呈現不同的 Paint,枚舉可以讓其每個枚舉值實現接口。
推薦一篇博客:小談Java Enum的多態性
總結
以上是生活随笔為你收集整理的Java 枚举:实现接口的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。