java匿名内部类用法总结实例源码。当需要extends一个类,或implements一个接口的时候,可以直接new一个这个类或接口的对象出来,然后在后面加{},里面写你准备写在子类里面的所有东西。
这样,new出来的这个对象就拥有了这个{}里面的所有东西。
举个例子说,假如你需要写
class A1 extends A{
public void fun(){
System.out.println(“A1-fun”);
}
}
然后
A1 a1 = new A1();
a1.fun();
这样就会调用到子类里面的方法。
这是一般写法。你还可以这样写:
A a = new A(){
public void fun(){
System.out.println(“A-son-fun”);
}
};
a.fun();
这是同样的效果。这就是匿名内部类最常用的用法。
比较常见的还有实现接口的时候,如果线程。
class T1 implements Runnable{
@Override
public void run() {
System.out.println(“t2 start..”);
}
}
Thread t = new Thread(new T1());
t.start();
这也是常见用法。除此之外,还可以这样写:
Thread t1 = new Thread(new Runnable(){
@Override
public void run() {
System.out.println(“t1 start..”);
}
});
t1.start();
效果也是一样的。
甚至是这样写:
new Thread(new Runnable(){
@Override
public void run() {
System.out.println(“t1 start..”);
}
}).start();
这个是不是很眼熟啊?
总结,需要写一个类,继承或实现一个类或接口,我们可以直接new一个这个类或接口的对象出来,在尾巴上加一个{},把原先准备写在子类里面的东西全写进去,
这样,new出来的这个对象就有了子类的所有内容,相当于写了个子类然后new了一个子类的对象。
下面,有一个比较完整的例子:
package wzq.j2se.claz;
public class NimingLei {
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable(){
@Override
public void run() {
System.out.println(“t1 start..”);
}
});
Thread t2 = new Thread(){
@Override
public void run() {
System.out.println(“t2 start..”);
}
};
t1.start();
t2.start();
//注意看下面这两种用法,效果是一样的,这儿是重点了!
NimingLeiA n = new NimingLeiA(){
public void fun(){
System.out.println(“bbbbbNimingLeiA-fun”);
}
};
n.fun();
NimingLeiA a = new A();
a.fun();
}
}
class NimingLeiA{
public void fun(){
System.out.println(“NimingLeiA-fun”);
}
}
class A extends NimingLeiA{
public void fun(){
System.out.println(“aaaaaaNimingLeiA-fun”);
}
}