Android应用开发之Java基础篇——内部类
2010-10-14 06:19:00 来源:本站整理我们再看看内部类的一些特点:
1、内部类可以定义类的private访问权限,外部类不可以定义private。
2、内部类具有外部类的所有访问权限,可以访问外部类的所有变量,包括private。你可能会问内部类怎么能做到这一点儿呢?答案是在创建内部类的时候,保存了一个指向外部类的引用,当访问变量时首先在外部类内部找,如果找不到,则用外部类的引用到外部类中查找。
3、一般情况下,引用外部类中变量和引用内部类自己变量一样,这叫隐式引用。当然在特殊情况下需要显示的指明引用内部类的变量,还是引用内部类自己变量。一个例子就是内部类和外部类定义了相同名字的变量,假如不指明将会发生混淆。例如:
public class TestInner
{
int i = 1;
class Inner
{
int i = 0;
public int getOuter()
{
return TestInner.this.i;
}
public int getInner()
{
return this.i;
}
}
public Inner getInner()
{
return new Inner();
}
public static void main(String[] argv)
{
TestInner outer = new TestInner();
TestInner.Inner inner = outer.getInner();
System.out.println("Out class = " + inner.getOuter() + " ");
System.out.println("Inner class = " + inner.getInner() + " ");
}
}
通过上例我们可以看出,如果引用内部类自己的变量可以通过“this.变量”来引用,如果你需要引用外部类的变量,必须要“外部类名.this.变量”来引用。
4、内部类可以定义成匿名内部类。这样的话,因为其没有类名,所以访问这个内部类只能把它向上转型成基类的类型。举个Android类子:
final Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
}
});
可以看出我们定义了一个View.OnClickListener的内部类,生成一个对象,并把该对象向上转型成 View.OnClickListener类型注册给Button对象。Button对象调用View.OnClickListener接口来访问这个匿名内部类对象。
5、内部类可以定义在类的任意作用域。内部类可以定义在类域中,类方法中等等。
以上Java内部类的知识,一般足够应付Android开发中的内部类的问题了。如果你想更加深入的学习内部类,请参考《Java编程思想》,这本书在我的电子书中有,可以下载。
更多精彩
赞助商链接