类外部类{
类内部类{
静态int i=100;//编译错误
静态void f(){}//编译错误
}
}
虽然无法使用OuterClass.InnerClass.i访问静态字段,但如果我想记录一些应该是静态的内容,例如创建的InnerClass对象的数量,则将该字段设置为静态会有所帮助。那么为什么Java禁止内部类中的静态字段/方法呢
编辑:我知道如何使编译器对静态嵌套类(或静态内部类)感到满意,但我想知道的是,如果有人了解更多,为什么java从语言设计和实现两个方面禁止内部类(或普通内部类)中的静态字段/方法
我想知道的是为什么java禁止内部类中的静态字段/方法
因为这些内部类是“实例”内部类。也就是说,它们类似于封闭对象的实例属性
因为它们是“实例”类,所以允许static特性没有任何意义,因为static本来就意味着在没有实例的情况下工作
就像您同时尝试创建静态/实例属性一样
以以下为例:
类员工{
公共字符串名称;
}
如果创建两个employee实例:
员工a=新员工();
a、 name=“奥斯卡”;
员工b=新员工();
b、 name=“jcyang”;
很清楚为什么每个属性都有自己的属性值name,对吗
内部类也是如此;每个内部类实例都独立于其他内部类实例
因此,如果试图创建计数器类属性,则无法在两个不同实例之间共享该值
类员工{
公共字符串名称;
类内部数据{
静态计数;//?哪一个计数?a或b?
}
}
在上面的示例中创建实例a和b时,静态变量count的正确值是多少?无法确定它,因为InnerData类的存在完全取决于每个封闭对象
这就是为什么当类被声明为静态时,它不再需要一个活实例来活自己。既然没有依赖项,就可以自由声明静态属性
我认为这听起来是重复的,但是如果你考虑一下实例属性和类属性之间的区别,这是有意义的