class father{
   class child{
      static int s_InstanceCount;
   }
}假如我用父类的对象创建若干个子类的实例,每创建一个子类的实例让s_InstanceCount加一,来计算有了多少个子类实例。为什么不行呢,java不让在子类里面有static方法和成员,这个限定是为了什么?

解决方案 »

  1.   

    这个代码看起来像内部类啊子类不是应该用extends father()的吗
      

  2.   

    内部类是非静态的,除了要依靠外部类实例,还要依赖内部类实例,静态常量是不要类实例的,在编译时就分配好了内存,且final类型可以离开实例存活一段时间。所以非静态内部类只能有静态的final型常量。
      

  3.   

    把s_InstanceCount变量定义在“父类”中。内部类能访问外部类的变量。
      

  4.   

    说的不错,不过内部类里定义成final的话不就是常量了吗。。
    你可以把内部类定义成静态的
    class father{
      static class child{
      static int s_InstanceCount;
      }
    }
     
      

  5.   

    定义成final怎么就变成常量了?
      

  6.   

    你的回复有点偏(个人感觉),内部类在使用之前首先你要确定使用什么样的内部类 下面的是复制百度的内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类。   (1)、内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号。   (2)、内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的。   (3)、内部类声明成静态的,就不能随便的访问外部类的成员变量,仍然是只能访问外部类的静态成员变量。
      

  7.   


    final成员变量表示常量,只能被赋值一次,赋值后值不再改变。