=======说明======
1. 内部类可以是public的,也可以是private及protected,但外部类不能是private及protected。
2. 一个java文件只允许有一个public的class,指的是并列的外部类而言的,但内部类可以是public的。
3. 一个java文件对应一个.class文件,即使该java文件中还有一些非public的类,也在一个.class文件中,
但若一个public的class中有一个public的内部类,则该内部类会单独生成一个.class文件。
4. Java的普通内部类包含三部分作用
(1) C++内部类
(2) 作为外部类的友元
(3) 保存外部类的实例
而static的内部类则只包含前两部分的作用。
举一例说明:
LedEvent是一内部类,如下定义并初始化内部类对象数组:
private static final LedEvent[] mLedEvents = new LedEvent[] {
new LedEvent(6, Led_ALWAYS_RED, false, 0),
new LedEvent(5, LED_ALWAYS_GREEN, false, 0)
}
上面的定义有问题,会提示this指针不能在static的语句中。
解决这个问题,可以这么做,即把内部类LedEvent,设置成static的,这样就可以了,如下:
private static class LedEvent() { ...}
事实上,如果内部类不引用外部类的变量,最好是定义成static的,否则,可能还存在内存泄露的风险。
======使用======
如果内部类要使用外部类对象的引用,可以使用外部类的名字后面紧跟圆点和this:
public class DotThis {
...
public class Inner {
public DotThis outer() {
return DotThis.this;
}
}
其他对象创建某类的内部类的对象,常见的有两种方式:
(1) 在外部类中提供一个方法,创建内部类的对象
public class DotThis {
public Inner inner() {
return new Inner();
}
}
这样,其他对象只需要调用该外部类的这个方法即可:
DotThis dt = new DotThis();
DotThis.Inner dti = dt.inner();
(2) 还可以这样直接用:
DotThis dt = new DotThis();
DotThis.Inner dti = dt.new Inner();