刚刚学习完java编程思想的内部类,以xmind软件做了一下整理,顺便生成了总结文档.但是做来给自己看的.非常的业余.所以如果有理解错误的地方,请大家指出,在下会随时更新和完善~:)~
ps:附件为xmind的整理文件~可以用xmind软件打开,另外xmind图上的注释代码也在文档中~
[img]http://dl.iteye.com/upload/attachment/604715/f1af8c89-dd17-36a1-9789-1d1dfbbeec89.jpg[/img]
内部类
1. 内部类特性
1.1 能够调用外部类的所有成员
1.1.1 使用.this
1.2 能够继承类和实现接口,能够向上转型
1.3 能够覆盖
1.4 生成内部类对象
1.4.1 使用.new
2. 内部类分类
2.1 匿名内部类
2.1.1 可以不定义名字而返回所实现的接口
2.2.1 嵌套在内部类的内部类,感觉这特性比较少用
2.3 作用域里内部类
2.3.1 包含在作用域或方法里的内部类,能够通过调用方法或判断域来定义内部类,在作用域以外是不可用的
2.4.1 能够在接口定义内部类,甚至在内部类实现外围接口
2.5.1 静态内部类不能调用外部类的非静态成员
这一点其实很好理解,因为static静态属性的代码是预先在内存中分配空间的,静态内部类的话也是预先在内存中分配空间,而非静态的方法属性是动态生成的,所以不能调用非静态的方法成员
3. 内部类的意义
3.1 多重继承
3.2 内部类代替主类用main方法测试
3.2.1 嵌套内部类测试
主要用于java的GUI编程中,常见有按键事务管理.
可以用于程序控制框架,参加java编程思想《内部类与控制框架》的例子.
4.1 事件适配器(匿名内部类)
ps:附件为xmind的整理文件~可以用xmind软件打开,另外xmind图上的注释代码也在文档中~
[img]http://dl.iteye.com/upload/attachment/604715/f1af8c89-dd17-36a1-9789-1d1dfbbeec89.jpg[/img]
内部类
1. 内部类特性
1.1 能够调用外部类的所有成员
1.1.1 使用.this
public class DotThis{
void f(){
System.out.println("DotThis.f()");
}
public class Inner{
public DotThis outer(){
return DotThis.this; //此处返回外部类的对象
}
public Inner inner() {
return new Inner(); //此处返回内部类本身
}
public static void main(String[] args){
DotThis dt =new DotThis();
DotThis.Inner dti = dt.inner();
dti.out().f();
}
}
}
1.2 能够继承类和实现接口,能够向上转型
1.3 能够覆盖
1.4 生成内部类对象
1.4.1 使用.new
public class DotNew{
public class Inner{};
public static void main(String[] args){
DotNew dn = new DotNew();
DotNew.Inner dni = dn.new Inner();
}
}
//通过调用外部类对象.new来返回一个内部类对象,在拥有外部类对象之前是不可能创建内部类对象的,因为内部类对象会暗暗链接到外部类对象上,但如果是静态内部类,则不需要对外部类对象的引用
2. 内部类分类
2.1 匿名内部类
2.1.1 可以不定义名字而返回所实现的接口
public Interface Contents{
public int value();
}
//这个匿名内部类是放在contents方法里的内部类,return new Contents()是返回一个实现了Contents接口的内部类,这里并没有给类定义名字.这一般是内部类不需要名字的情况下,比如事件响应后应该执行的代码.
public Class Parcel7{
public Contents contents(){
return new Contents(){
private int i =11;
public int value(){ return 1;}
}
}
public static void main(String[] args){
Parcel7 p =new Parcel7();
Contents c = p.contents();
}
}
2.2 嵌套内部类
2.2.1 嵌套在内部类的内部类,感觉这特性比较少用
2.3 作用域里内部类
2.3.1 包含在作用域或方法里的内部类,能够通过调用方法或判断域来定义内部类,在作用域以外是不可用的
public class Parcel6{
private void internalTracking(boolean b){
if(b){
class TrackingSlip{
.........
}
}
}
public void track(){internalTracking(true);}
public static void main(String[] args){
Parcel6 p = new Parcel6();
p.track(); //如果不调用这个方法,TrackingSlip类是不存在的,但是一样会编译出class。
}
}
2.4 接口内部类
2.4.1 能够在接口定义内部类,甚至在内部类实现外围接口
public interface ClassInInterface{
void howdy();
//内部类test实现了外围接口ClassInInterface
Class Test implements ClassInInterface{
public void howdy(){
System.out.println("howdy in classininterface!");
}
public static void main(String[] args){
new Test().howdy();
}
}
}
2.5 静态内部类
2.5.1 静态内部类不能调用外部类的非静态成员
这一点其实很好理解,因为static静态属性的代码是预先在内存中分配空间的,静态内部类的话也是预先在内存中分配空间,而非静态的方法属性是动态生成的,所以不能调用非静态的方法成员
3. 内部类的意义
3.1 多重继承
3.2 内部类代替主类用main方法测试
3.2.1 嵌套内部类测试
public class TestBed{
public void f(){System.out.println("f()");}
public static class Tester{
public static void main(String[] args){
TestBed t =new TestBed();
t.f();
}
}
}
//通过编译会生成一个独立的类TestBed$Tester.class,可以使用这个类测试,而不需要包含它,只需要在产品打包前简单删除TestBed$Tester.class
4. 内部类的实际应用
主要用于java的GUI编程中,常见有按键事务管理.
可以用于程序控制框架,参加java编程思想《内部类与控制框架》的例子.
4.1 事件适配器(匿名内部类)