Java 枚舉:實現介面

來源:互聯網
上載者:User

所有的枚舉類都繼承自 Enum,因為 Java 不支援多繼承,所以枚舉無法繼承其它類。


但是,枚舉與普通類一樣,可以實現介面。

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 String toString() {// return this._name.toUpperCase();// }@Overridepublic void setColor() {System.out.println("Current paint color: " + _name);}}}

自訂介面 Paint,枚舉 Color 實現該介面。




試想一下,為 Paint 選擇 color 的同時是否可以指定 Paint 的類型呢?


那麼,我們改造這個 Paint 介面:

interface Paint {public void setColor();public void setType();}

枚舉 Color 實現 Paint:

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 String toString() {// return this._name.toUpperCase();// }@Overridepublic void setColor() {System.out.println("Current paint color: " + _name);}@Overridepublic void setType() {System.out.println("Current paint type: " + "How to determine??");}}


把這個問題具體化:


在選擇 RED 的同時,我想選擇類型為 5 號的 paint

在選擇 GREEN 的同時,我想選擇類型為 1 號的 paint,如何處理?

....


(這裡只是為了說明枚舉的功能,不是為了更好的找到解決上述問題的方法,請勿跑題!)


在前面的部落格 Java 枚舉:理解枚舉本質 中說到,

枚舉的常量值本質就是枚舉對象,那麼我們可以採用匿名內部類來解決這個問題!


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) {@Overridepublic void setColor() {System.out.println("Current paint color: " + RED._name);}@Overridepublic void setType() {System.out.println("Current paint type: " + "5");}},GREEN("green color", 1) {@Overridepublic void setColor() {System.out.println("Current paint color: " + GREEN._name);}@Overridepublic void setType() {System.out.println("Current paint type: " + "1");}},BLUE("blue color", 2) {@Overridepublic void setColor() {System.out.println("Current paint color: " + BLUE._name);}@Overridepublic void setType() {System.out.println("Current paint type: " + "12");}},YELLOW("yellow color", 3) {@Overridepublic void setColor() {System.out.println("Current paint color: " + YELLOW._name);}@Overridepublic 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的多態性




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.