黑马程序员技术交流社区

标题: 匿名 内部类 问题 [打印本页]

作者: XinWen    时间: 2014-5-3 13:51
标题: 匿名 内部类 问题
  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 为什么

作者: wconho    时间: 2014-5-3 14:03
当外部类中的静态方法访问内部类时,内部类必须是静态static的,这里的外部类是EnumDemo,这里的外部静态方法是main.
作者: shi0000    时间: 2014-5-3 15:35
因为你的内部类中使用了静态方法或变量
作者: 王春蕾    时间: 2014-5-3 16:19
因为只有红绿蓝三种颜色的交通灯,是不能被改变的,所以定义成final已确保三种颜色灯的不可改变性,定义static是为了方便使用类名直接调用,更加符合面向对象的特点
作者: skill20    时间: 2014-5-3 16:24
如果内部类被静态修饰,相当于外部类,会出现访问局限性,只能访问外部类中的静态成员。
        注意;如果内部类中定义了静态成员,那么该内部类必须是静态的。
作者: wyqs92    时间: 2014-5-3 21:39
static修饰符。
        内部类被静态修饰,出现访问局限性,只能访问外部类中的静态成员。
        内部类被静态后,会随着外部类的加载而加载。

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

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

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

记住:内部类只有定义在外部类的成员 位置上,才具备这些修饰符。
作者: XinWen    时间: 2014-5-4 08:28
wyqs92 发表于 2014-5-3 21:39
static修饰符。
        内部类被静态修饰,出现访问局限性,只能访问外部类中的静态成员。
        内部类被静态后,会 ...

清晰多了 感谢




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