java内部类学习笔记

来源:互联网 发布:pplive网络电视2015 编辑:程序博客网 时间:2024/05/22 12:08
定义:可以将一个类的定义放在另一个类的定义内部,这就是内部类。

内部类的种类

1.成员内部类
成员内部类是定义在另一个类中,不以static修饰。
要生成外部类对象的引用,可用外部类.this的方式,生成的是一个静态的引用。
要创建内部的对象,可用 外部类.new语法,必须用外部类的实例,不能用静态的外部类引用。 

 
class MemberInner{
int i;
class Inner{        //内部类
void Incresment(){
i++;        //操作外部类的属性
}
}
}
 
 
 
public class MemberInnerTest {
public static void main(String[] args) {
MemberInner mi = new MemberInner();
MemberInner.Inner inner = mi.new Inner();
inner.Incresment();
System.out.println(mi.i+"");
}
 
}
2.匿名内部类
匿名内部类是没有名字的内部类,没有构造方法。
如下Android开发常用的设置点击事件则是通过匿名内部类实现。
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//实现方法
}
});

3.嵌套类
嵌套类与成员内部类不同的地方在于,它声明为static。
当声明为嵌套类意味着:
要创建嵌套类的对象,并不需要其外围类的对象。
不能从嵌套类的对象中访问非静态的外围类成员。

要创建嵌套类的对象,并不需要其外围类的对象,这个可以理解为,静态内部类在外部类中不管创建多少个对象,仅存在一个依赖类而存在,可以直接使用外部类.内部类 访问。
不能从嵌套类的对象中访问非静态的外围类成员,是因为嵌套类依赖类存在,只能访问类的静态属性,而非static属性是依赖对象而存在的,所以不能访问。

4.局部内部类
局部内部类是定义在一个方法或一个作用域里的类,局部内部类
它们不仅能够访问包含它们的外围类的域,而且还可以访问局部变量,不过这些局部变量必须被声明为final,对它进行初始化后不能够再修改。


为什么要使用内部类?
1.内部类的代码操作创建它的外围类的对象。所以可以认为内部类提供了某种进入外围类的窗口。
2.每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。
3.内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立。


内部类标示
每个类都会产生一个.class文件,其中包含了如何创建该类型的对象的全部信息,内部类也必须生成一个.class文件以包含它们的Class对象信息。这些文件的命名有严格的规则:外围类的名字,加上"$",加上内部类的名字。如
Counter.class
LocalInnerClass$LocalCounter.class










0 0
原创粉丝点击