我查看了LinkedList的Java代码,注意到它使用了一个静态嵌套类Entry。
public class LinkedList<E> ... {
...
private static class Entry<E> { ... }
}
为什么要使用静态嵌套类,而不是普通的内部类?
我能想到的唯一原因是,Entry不能访问实例变量,所以从OOP的角度来看,它有更好的封装。
但我想可能还有其他原因,可能是表现。可能是什么?
请注意。我希望我的术语是正确的,我将它称为静态内部类,但我认为这是错误的:http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html
静态嵌套类就像任何其他外部类一样,因为它不能访问外部类成员。
为了方便打包,我们可以将静态嵌套类合并到一个外部类中以提高可读性。除此之外,静态嵌套类没有其他用例。
这种用法的例子,你可以在Android R.java(资源)文件中找到。
android的Res文件夹包含布局(包含屏幕设计),可绘制文件夹(包含用于项目的图像),值文件夹(包含字符串常量)等。
因为所有的文件夹都是Res文件夹的一部分,android工具生成一个R.java(资源)文件,其中内部包含许多静态嵌套类的每个内部文件夹。
下面是在android中生成的R.java文件的外观和感觉:
这里他们只是为了包装方便而使用。
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* aapt tool from the resource data it found. It
* should not be modified by hand.
*/
package com.techpalle.b17_testthird;
public final class R {
public static final class drawable {
public static final int ic_launcher=0x7f020000;
}
public static final class layout {
public static final int activity_main=0x7f030000;
}
public static final class menu {
public static final int main=0x7f070000;
}
public static final class string {
public static final int action_settings=0x7f050001;
public static final int app_name=0x7f050000;
public static final int hello_world=0x7f050002;
}
}
内部类的优势——
一次性使用
支持和改进封装
readibility
私有字段访问
没有外部类的存在,内部类就不存在。
class car{
class wheel{
}
}
内部类有四种类型。
正常的内部类
局部内部类
匿名内部类
静态内部类
点——
from static inner class ,we can only access static member of outer class.
Inside inner class we cananot declare static member .
inorder to invoke normal inner class in static area of outer class.
Outer 0=new Outer();
Outer.Inner i= O.new Inner();
inorder to invoke normal inner class in instance area of outer class.
Inner i=new Inner();
inorder to invoke normal inner class in outside of outer class.
Outer 0=new Outer();
Outer.Inner i= O.new Inner();
inside Inner class This pointer to inner class.
this.member-current inner class
outerclassname.this--outer class
for inner class applicable modifier is -- public,default,
final,abstract,strictfp,+private,protected,static
outer$inner is the name of inner class name.
inner class inside instance method then we can acess static and instance field of outer class.
10.内部类在静态方法中,那么我们只能访问的静态字段
外部类。
class outer{
int x=10;
static int y-20;
public void m1() {
int i=30;
final j=40;
class inner{
public void m2() {
// have accees x,y and j
}
}
}
}