黑马程序员技术交流社区

标题: 一个关于枚举中的抽象方法的问题 [打印本页]

作者: 疯子的昨天    时间: 2014-2-6 00:35
标题: 一个关于枚举中的抽象方法的问题
在张孝祥老师的视频枚举的讲解中。发现这样一个问题
    public enum TrafficLamp{
                 RED{public TrafficLamp nextLamp(){
                         return GREEN;
                 }
                         },
                 GREEN{public TrafficLamp nextLamp(){
                         return YELLOW;
                 }},
                 YELLOW{public TrafficLamp nextLamp(){
                         return RED;
                 }
                         
                 };
                 
                public abstract TrafficLamp nextLamp();
就是这个类。但是最后一句话把public 改成private 就会报错。 为什么不能用private修饰?
作者: 黄志成    时间: 2014-2-6 01:14
nextLamp是一个抽象方法,需要在子类中实现,加了私有就不实现了,所以会报错。
作者: Unicorn319    时间: 2014-2-6 01:16
报错的提示是
"The abstract method nextLamp in type TrafficLamp can only set a visibility modifier, one of public or protected"

从这个提示来看,抽象的方法必须可见,修饰符必须是public或protected的一种

比如,换成这种形式完成这个功能就能加private
  1.     public enum TrafficLamp{
  2.         RED,GREEN,YELLOW;
  3.         
  4.         private TrafficLamp nextLamp(){
  5.                switch(this){
  6.                case RED: return GREEN;
  7.                case GREEN: return YELLOW;
  8.                case YELLOW: return RED;
  9.                }
  10.                return RED;
  11.        }
  12.     }
复制代码


但是,如果方法加了private就不能直接用了不怎么实用...仅供参考
作者: 疯子的昨天    时间: 2014-2-6 14:10
但是又有问题了 private 的权限是本类可以访问。 既然都在一类里面 为什么访问不了?
作者: 汤柳清    时间: 2014-2-7 13:43
疯子的昨天 发表于 2014-2-6 14:10
但是又有问题了 private 的权限是本类可以访问。 既然都在一类里面 为什么访问不了? ...

上面的楼主说了,,抽象的方法必须可见,修饰符必须是public或protected的一种。 private 的权限是本类可以访问的,但是子类是不能访问父类的private方法的。匿名内部类其实就相当于一个子类。




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