黑马程序员技术交流社区

标题: 枚举问题 [打印本页]

作者: 一个铃,一颗珠    时间: 2013-8-22 23:51
标题: 枚举问题
本帖最后由 forward 于 2013-8-24 21:25 编辑

public enum SingletonE {
  INSTANCE {
  @Override
  protected void someMethod() {
   
  }
} ;
    protected abstract void someMethod();  
}

  public static void main(String[] args) {
   SingletonE.INSTANCE;
  }

调用的时候报错,编译不通过。

作者: gulup    时间: 2013-8-23 00:19
SingletonE se = SingletonE.INSTANCE;
试试
作者: 行如止水    时间: 2013-8-23 22:56
你应该重新创建一个SingletonE对象,然后用SingletonE.INSTANCE来实例化,就行了;就像楼上说的:

SingletonE se = SingletonE.INSTANCE;
作者: 杨增坤    时间: 2013-8-24 10:09
我认为为什么是:SingletonE se = SingletonE.INSTANCE;就可以了呢,
用内部类理解:内部类可以直接使用外部类成员,但是外部类要使用内部类的成员的话,那么必须通过内部类对象来调用,所以要使用一个对象来接收。
你还有一个错误的地方,也许是你的失误,就是
} ;
    protected abstract void someMethod();  
} 把此"}"应放到最后。

作者: 熊纪达    时间: 2013-8-24 11:47
forward 发表于 2013-8-24 10:09
我认为为什么是:SingletonE se = SingletonE.INSTANCE;就可以了呢,
用内部类理解:内部类可以直接使用外 ...

不好意思,这里有个小问题想请教一下,SingletonE.INSTANCE是一个实例对象,如果按内部类来理解,在静态的main()函数中建立内部里对象,那么内部类也要是静态的吧,怎么理解呢?public class Demo {
        public void get(){
                new Demo1();
        }
        class Demo1{     
               
                }
}

上面的小程序运行没有错误,内部类可以直接创建不需要引用的啊。


还有下面的小代码如何理解??public class Demo {
        public void get(){
                new Demo1();        //不报错      
        }
       
}
class Demo1{
        new Demo();                          //报错
}



作者: 清心玉质    时间: 2013-8-24 12:28
我觉着,SingletonE.INSTANCE就是语法不完整,INSTANCE就是一个常量对象,要不把它赋值: SingletonE e = SingletonE.INSTANCE;
要不就是调用里面的方法SingletonE.INSTANCE.someMethod();
单单把一个对象放在那是不对的吧。

还有内部类哪有什么静态的,class Demo1{
        new Demo();                          //报错是因为构造函数只能是本类的构造函数,名字应该是一致的
}



作者: javamov    时间: 2013-8-24 13:22
class Demo1{
        new Demo();                          //报错
}
new 出的对象的生命周期就在与这个变量最邻近的一对大括号{}里面





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