A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Changer_s 中级黑马   /  2013-6-12 19:12  /  4200 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

枚举能继承类或接口吗?为什么呢?
我不能理解为什么会出现这种问题?
枚举它不就是一个类?面试官告诉我不能?我迷茫了!

9 个回复

倒序浏览
高手呢?求解释???
回复 使用道具 举报
没有说到final关键字的问题吗?
回复 使用道具 举报
继承应该不能,没试验出来,但是实现接口可以啊
  1. package com.heima.ask;
  2. //自定义一个接口
  3. public interface MyInterfaces {
  4. public void sayHello();
  5. }
复制代码
定义一个枚举
  1. package com.heima.ask;

  2. public enum MyEnum  implements MyInterfaces{
  3. A,B,C;

  4. @Override
  5. public void sayHello() {
  6.        
  7.         System.out.println("成功");
  8. }
  9. }
复制代码
进行测试
  1. package com.heima.ask;

  2. public class TestDemo {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 MyEnum  aa = MyEnum.A;
  8.                 aa.sayHello();
  9.         }

  10. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
可以继承接口 不可以继承类吧
1,每个枚举类型默认都是Enum类的子类 java不支持多继承的。
2,枚举类型的构造方法只能是private修饰的,也就是说 不能用关键字new,而java中子类继承父类的话必须要调用父类的构造方法进行初始化。emum不能继承其他普通类。
3,但是枚举类型继承了Enum类 因为文档上写了 Enum类的构造方法是这样的 “单独的构造方法。程序员无法调用此构造方法。该构造方法用于由响应枚举类型声明的编译器发出的代码”

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
枚举是不允许继承的,因为枚举类E的直接父类都是Enum<E>(The direct superclass of an enum type named E is Enum<E>),而Java语言中是不允许多继承的。
枚举有一个特性:除了自身定义的枚举常量之外,不允许用户自定义实例。由此可见,如果枚举能够继承其他类,则会破坏这一特性,比如可以通过父类的的构造方法创建对象。

枚举是可以去实现接口的,因为接口中不允许定义构造方法,因此不会通过实现接口中的方法而破坏枚举的特性。在如下测试中也能正常编译运行:
  1. public interface EIn {
  2.         public String nextColor();
  3. }

  4. public enum Color implements EIn {
  5.         BLUE,RED,GREEN;

  6.         @Override
  7.         public String nextColor() {
  8.                 switch(this){
  9.                         case BLUE:
  10.                                 return "RED";
  11.                         case GREEN:
  12.                                 return "BLUE";
  13.                         case RED:
  14.                                 return "GREEN";
  15.                         default:
  16.                                 return "DEFAULT";
  17.                 }
  18.         }

  19.         public static void main(String[] args) {
  20.                 System.out.println(Color.BLUE.nextColor());
  21.         }
  22. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 赞一个!

查看全部评分

回复 使用道具 举报
Java 5 新增,是类类型,但不能使用new 不能继承其他类,也不能作为超类,即不能扩展.但隐式继承自java.lang.Enum类,可以实现接口.

不用final修饰的类,都是可以被extends得 final影响继承,但是不涉及继承。
刚开始学习,对于final只需要记住
1) final修饰的类不能被继承
2) final修饰的变量其值不能被改变
3)final修饰的局部变量有利于垃圾回收
枚举类有以下特点:
1 特殊类型的常量值列表
2 类型是枚举
3 声明在类外和类内,不能为方法中
4 声明在类外部的,不能为static ,final,abstract,protected,private
5 可以有构造方法,普通方法,变量跟常量代码块
6 可以给构造方法传参
7 构造方法可以有参可以重载
8 构造方法不能直接引用,必须总是在初始化时被调用
9 ;在声明的结尾是可选的

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
问题已经解决的,请及时更改分类为已解决,方便大家查阅,没有的继续追问
关于提问技巧请看:http://bbs.itheima.com/thread-53229-1-1.html
回复 使用道具 举报
楼主你好  如果帖子的问题已解决,请把帖子的类型改为已解决,如果没解决请继续追问。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马