为什么内部类中有static成员时内部类也必须声明为static

来源:互联网 发布:汉字转ascll java 编辑:程序博客网 时间:2024/04/30 02:44
         如果A和B类关系紧密,且A类的主要作用是帮助完成B类的实现,这时可将A类作为B类的内部类,两个类可以互相访问各自的私有成员,这样就方便B类的设计,使B类更加自给自足(self contained)。http://www.tanhuanyao.com   http:// tanhuanyao.com   http://www.bianshayao.com/   http://bianshayao.com/这是我理解的内部类产生的原因,有点类似于C++中的友元类 A类作为B类的内部类,便是B类的一份子,地位上和B类的属性和方法相当,此时A类便有static和非static之分了,这就是为什么只有内部类的类本身才有static的说法的原因。内部类声明为static和普通类的成员为static的含义一样,都是表示被声明为static的东西属于类范畴,不依赖于类的具体对象。如果内部类是非static的,那么这个内部类就依赖于外部类的具体对象,在该内部类中可以调用外部类的非static方法;如果内部类是static的,即该内部类属于外部类的类范畴,不依赖于外部类的具体对象,那么该内部类只能调用外部类的static方法,因为外部类的非static方法依赖于外部类的具体对象。这和普通类中static方法只能访问static的属性和方法的道理是一样的。那么为什么规定内部类中如果出现了static方法,该内部类也必须声明为static呢?内部类中的static方法表明该方法不依赖于内部类的具体对象,属于内部类的类范畴,假设此时内部类为非static的,那么内部类对象的产生就依赖于外部类对象,有一个外部类对象,才能有一个与之对应的内部类对象,而内部类对象中的static方法不依赖于内部类对象,所以使用该static方法便没有必要创建具体的内部类对象,如果该static方法确有其存在的意义,那就说明该内部类完全没有必要是非static的,java规定这时该内部类必须是static的。
0 0
原创粉丝点击