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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© gzbbxu 中级黑马   /  2013-6-30 07:48  /  4375 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙百鑫 于 2013-7-1 08:02 编辑

请看继承的代码编译失败。
  1. package com.jbit.zhkk;

  2. public enum Test12 extends Sub{


  3.         
  4.   
  5. }
  6. interface inter{
  7.         void say();
  8. }
  9. class Sub{
  10.         
  11. }
复制代码
再看实现接口的例子
  1. package com.jbit.zhkk;

  2. public enum Test12 implements inter{
  3.         ;

  4.         @Override
  5.         public void say() {
  6.                 // TODO Auto-generated method stub
  7.                
  8.         }
  9. }
  10. interface inter{
  11.         void say();
  12. }
  13. class Sub{
  14.         
  15. }
复制代码
针对上面的两种例子,哪位大神,能给解释下?

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 很给力!

查看全部评分

6 个回复

倒序浏览
通过以上的例子,可以看出,枚举类不能继承其他类,但是可以实现一个接口。但是我还是想问一下为什么。。。。
回复 使用道具 举报
我感觉枚举不能增加成员变量。继承有可能会继承成员变量。所以不给继承只给实现接口。
回复 使用道具 举报
查阅API:
类 Enum<E extends Enum<E>>
java.lang.Object
  继承者 java.lang.Enum<E>
我们得知,enum继承于Enum,所以不可能再继承其他的类了!
回复 使用道具 举报
L.I.F.E 发表于 2013-6-30 10:38
查阅API:
类 Enum
java.lang.Object
  1. Compiled from "Test2.java"
  2. public final class cn.day1.Test2$Week extends java.lang.Enum<cn.day1.Test2$Week> {
  3.   static {};
  4.     Code:
  5.        0: iconst_0      
  6.        1: anewarray     #1                  // class cn/day1/Test2$Week
  7.        4: putstatic     #10                 // Field ENUM$VALUES:[Lcn/day1/Test2$Week;
  8.        7: return        

  9.   public static cn.day1.Test2$Week[] values();
  10.     Code:
  11.        0: getstatic     #10                 // Field ENUM$VALUES:[Lcn/day1/Test2$Week;
  12.        3: dup           
  13.        4: astore_0      
  14.        5: iconst_0      
  15.        6: aload_0      
  16.        7: arraylength   
  17.        8: dup           
  18.        9: istore_1      
  19.       10: anewarray     #1                  // class cn/day1/Test2$Week
  20.       13: dup           
  21.       14: astore_2      
  22.       15: iconst_0      
  23.       16: iload_1      
  24.       17: invokestatic  #22                 // Method java/lang/System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
  25.       20: aload_2      
  26.       21: areturn      

  27.   public static cn.day1.Test2$Week valueOf(java.lang.String);
  28.     Code:
  29.        0: ldc           #1                  // class cn/day1/Test2$Week
  30.        2: aload_0      
  31.        3: invokestatic  #30                 // Method java/lang/Enum.valueOf:(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;
  32.        6: checkcast     #1                  // class cn/day1/Test2$Week
  33.        9: areturn      
  34. }
复制代码
注意看第二行。

不过,我想通过反射来获取enum的字节码,不知道可以不可以啊?

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 25分啦

查看全部评分

回复 使用道具 举报
L.I.F.E 发表于 2013-6-30 10:49
注意看第二行。

不过,我想通过反射来获取enum的字节码,不知道可以不可以啊? ...
  1. package cn.day1;

  2. public class Test2 {
  3.         public enum Week{
  4.                
  5.         }
  6.         public static void main(String[] agrs)throws Exception{
  7.                 Class week = Class.forName("cn.day1.Test2$Week");
  8.                 System.out.println(week.getSuperclass());
  9.         }
  10. }
复制代码
运行结果:class java.lang.Enum
回复 使用道具 举报
帖子解决。请及时联系版主改成已解决。不然会漏分的哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马