关于内部类的整理

刚刚学习完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

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 事件适配器(匿名内部类)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值