-----------------------------------------------
关于JAVA内部类:一个内部类的定义是定义 在另一个类内部的类。
存在它的原因是:
1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据。即内部类实例对包含它的 哪个类的实例来说,是特权的。
2.对于同一个包中的其他类来说,内部类能够隐藏起来,换句话说,内部类不管方法的可见性如何,那怕是 public,除了包容类,其他类都无法使用它。
3.匿名内部类可以很方便的定义回调。
4.使用内部类可以非常方便的编写事件驱 动程序。
其实它真正的目的仅仅为了定义回调--进一步就是事件驱动。
接口和回调:编程一个常用的模式是回调模式,在这种模式中你 可以指定当一个特定时间发生时回调对象上的方法。
-----------------------------------------------
注意事项:
匿名类和内部类中的中的this :
有时候,我们会用到一些内部类和匿名类。当在匿名类中用this时,这个 this则指的是匿名类或内部类本身。
这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名。如下面这个例子:
public class A {
int i = 1;
public A() {
Thread thread = new Thread() {
public void run() {
for(;;) {
A.this.run();
try {
sleep(1000);
} catch(InterruptedException ie) {
}
}
}
};
thread.start();
}
public void run() {
System.out.println("i = " + i);
i++;
}
public static void main(String[] args) throws Exception {
new A();
}
}
在 上面这个例子中, thread 是一个匿名类对象,在它的定义中,它的 run 函数里用到了外部类的 run 函数。
这时由于函数同 名,直接调用就不行了。这时有两种办法,一种就是把外部的 run 函数换一个名字,但这种办法对于一个开发到中途的应用来说是不可取的
。 那么就可以用这个例子中的办法用外部类的类名加上 this 引用来说明要调用的是外部类的方法 run。
----------------------------------------------
对 于这个例子:
this.test(new Inner(){
public void method1(){
System.out.print("1111");
}
public void method2(){
System.out.print("22222");
}
});
这 个时候调用test()方法,那Inner类的method1和method2是什么时候被调用的?难道也是this对象向他们发消息(比如传入一个参 数)吗?还是直接显式的调用??
对于Inner类,除了this这个类,就是this.test(...那句中的this,它能够调用 Inner类的方法,其他地方都不行,然而,这也需要你在类中有个地方保存有对这个内部类实例的引用才可以。再说明一次,内部类是用来在某个时刻调用外面 的方法而存在的--这就是回调。
为了说明内部类实例的方法只能在包容类的实例中调用,其他地方无法调用,给个例子如下:
JAVA2实用教 程源码:
/** 一个应用程序,用来演示内部类的使用 */
/** 类Outer */
class Outer{
private static int size;
/** 内 部类Inner的声明 */
public class Inner{
private int size;
/** 方法 doStuff() */
public void doStuff(int size){
size++; //存取局部变量
this.size++; // 存取其内部类的成员变量
Outer.this.size++; //存取其外部类的成员变量
System.out.println(size+" "+this.size+" "+Outer.this.size);
}
}// 内部类Inner结束
/** 类Outer中定义的实例方法testInner()方法 */
public void testInner(){
Inner i=new Inner();
i.doStuff(5);
}
/** main() 方法 */
public static void main(String[] a){
Outer o=new Outer();
o.testInner();
}
}// 类Outer结束
关于Java匿名类
最新推荐文章于 2024-09-15 19:46:31 发布