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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© XinWen 中级黑马   /  2014-5-3 13:51  /  1212 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class EnumDemo {

  2.         public static void main(String[] args) {
  3.                
  4.         }
  5.        
  6.         public abstract static class Lamp {
  7.                 //常量,交通灯的固定三种颜色
  8.                 public static final int RED = 0;
  9.                 public static final int GREEN = 1;
  10.                 public static final int YELLO = 2;
  11.                
  12.                 //该灯 持续点亮的时间
  13.                 private int mTime;
  14.                 //该灯的颜色,必须是 本类中定义的 三个颜色之一
  15.                 private int mColor;
  16.                
  17.                
  18.                 private Lamp(int pTime, int pColor){
  19.                         mTime = pTime;
  20.                         mColor = pColor;
  21.                 }
  22.                
  23.                 public abstract Lamp next();
  24.                
  25.                 public static  Lamp Red = new Lamp(3, Lamp.RED) {
  26.                         @Override
  27.                         public Lamp next() {
  28.                                 return Green;
  29.                         }
  30.                 };
  31.                
  32.                 public static Lamp Green = new Lamp(3, Lamp.GREEN) {
  33.                         @Override
  34.                         public Lamp next() {
  35.                                 return Yello;
  36.                         }
  37.                 };
  38.                
  39.                 public static Lamp Yello = new Lamp(1, Lamp.YELLO) {
  40.                         @Override
  41.                         public Lamp next() {
  42.                                 return Red;
  43.                         }
  44.                 };
  45.                
  46.         }
  47.        

  48. }
复制代码
内部 类 Lamp 必须要声明为 static 为什么

评分

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

查看全部评分

6 个回复

倒序浏览
当外部类中的静态方法访问内部类时,内部类必须是静态static的,这里的外部类是EnumDemo,这里的外部静态方法是main.
回复 使用道具 举报
因为你的内部类中使用了静态方法或变量
回复 使用道具 举报
因为只有红绿蓝三种颜色的交通灯,是不能被改变的,所以定义成final已确保三种颜色灯的不可改变性,定义static是为了方便使用类名直接调用,更加符合面向对象的特点
回复 使用道具 举报
如果内部类被静态修饰,相当于外部类,会出现访问局限性,只能访问外部类中的静态成员。
        注意;如果内部类中定义了静态成员,那么该内部类必须是静态的。
回复 使用道具 举报
static修饰符。
        内部类被静态修饰,出现访问局限性,只能访问外部类中的静态成员。
        内部类被静态后,会随着外部类的加载而加载。

        如果内部类中定义了静态成员,该内部类必须被静态修饰。

        //访问静态内部类中的非静态成员。 直接创建内部类对象。
        外部类名.内部类名 变量名 = new 外部类名.内部类名();

        //访问静态内部类中的静态成员。 不需要对象。
        外部类名.内部类名.内部类的静态成员

记住:内部类只有定义在外部类的成员 位置上,才具备这些修饰符。
回复 使用道具 举报
wyqs92 发表于 2014-5-3 21:39
static修饰符。
        内部类被静态修饰,出现访问局限性,只能访问外部类中的静态成员。
        内部类被静态后,会 ...

清晰多了 感谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马