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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在张孝祥老师的视频枚举的讲解中。发现这样一个问题
    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修饰?

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

4 个回复

正序浏览
疯子的昨天 发表于 2014-2-6 14:10
但是又有问题了 private 的权限是本类可以访问。 既然都在一类里面 为什么访问不了? ...

上面的楼主说了,,抽象的方法必须可见,修饰符必须是public或protected的一种。 private 的权限是本类可以访问的,但是子类是不能访问父类的private方法的。匿名内部类其实就相当于一个子类。
回复 使用道具 举报
但是又有问题了 private 的权限是本类可以访问。 既然都在一类里面 为什么访问不了?
回复 使用道具 举报
报错的提示是
"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就不能直接用了不怎么实用...仅供参考

评分

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

查看全部评分

回复 使用道具 举报
nextLamp是一个抽象方法,需要在子类中实现,加了私有就不实现了,所以会报错。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马