黑马程序员技术交流社区

标题: 枚举能继承类或接口吗?为什么呢? [打印本页]

作者: Changer_s    时间: 2013-6-12 19:12
标题: 枚举能继承类或接口吗?为什么呢?
枚举能继承类或接口吗?为什么呢?
我不能理解为什么会出现这种问题?
枚举它不就是一个类?面试官告诉我不能?我迷茫了!
作者: Changer_s    时间: 2013-6-12 21:15
高手呢?求解释???
作者: 刘兆华    时间: 2013-6-12 21:30
没有说到final关键字的问题吗?
作者: 知行    时间: 2013-6-12 23:17
继承应该不能,没试验出来,但是实现接口可以啊
  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. }
复制代码

作者: 张甲甲    时间: 2013-6-12 23:22
可以继承接口 不可以继承类吧
1,每个枚举类型默认都是Enum类的子类 java不支持多继承的。
2,枚举类型的构造方法只能是private修饰的,也就是说 不能用关键字new,而java中子类继承父类的话必须要调用父类的构造方法进行初始化。emum不能继承其他普通类。
3,但是枚举类型继承了Enum类 因为文档上写了 Enum类的构造方法是这样的 “单独的构造方法。程序员无法调用此构造方法。该构造方法用于由响应枚举类型声明的编译器发出的代码”
作者: 苑永志    时间: 2013-6-13 00:53
枚举是不允许继承的,因为枚举类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. }
复制代码

作者: Spole_168    时间: 2013-6-13 08:32
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 ;在声明的结尾是可选的
作者: 曹睿翔    时间: 2013-6-13 15:54
问题已经解决的,请及时更改分类为已解决,方便大家查阅,没有的继续追问
关于提问技巧请看:http://bbs.itheima.com/thread-53229-1-1.html
作者: 袁梦希    时间: 2013-6-14 18:08
楼主你好  如果帖子的问题已解决,请把帖子的类型改为已解决,如果没解决请继续追问。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2