java中的匿名外部類具體總結。本站提示廣大學習愛好者:(java中的匿名外部類具體總結)文章只能為提供參考,不一定能成為您想要的結果。以下是java中的匿名外部類具體總結正文
匿名外部類也就是沒著名字的外部類
正由於沒著名字,所以匿名外部類只能應用一次,它平日用來簡化代碼編寫
但應用匿名外部類還有個條件前提:必需繼續一個父類或完成一個接口
實例1:不應用匿名外部類來完成籠統辦法
abstract class Person {
public abstract void eat();
}
class Child extends Person {
public void eat() {
System.out.println("eat something");
}
}
public class Demo {
public static void main(String[] args) {
Person p = new Child();
p.eat();
}
}
運轉成果:eat something
可以看到,我們用Child繼續了Person類,然後完成了Child的一個實例,將其向上轉型為Person類的援用
然則,假如此處的Child類只應用一次,那末將其編寫為自力的一個類豈不是很費事?
這個時刻就引入了匿名外部類
實例2:匿名外部類的根本完成
abstract class Person {
public abstract void eat();
}
public class Demo {
public static void main(String[] args) {
Person p = new Person() {
public void eat() {
System.out.println("eat something");
}
};
p.eat();
}
}
運轉成果:eat something
可以看到,我們直接將籠統類Person中的辦法在年夜括號中完成了
如許即可以省略一個類的書寫
而且,匿名外部類還能用於接口上
實例3:在接口上應用匿名外部類
interface Person {
public void eat();
}
public class Demo {
public static void main(String[] args) {
Person p = new Person() {
public void eat() {
System.out.println("eat something");
}
};
p.eat();
}
}
運轉成果:eat something
由下面的例子可以看出,只需一個類是籠統的或是一個接口,那末其子類中的辦法都可使用匿名外部類來完成
最經常使用的情形就是在多線程的完成上,由於要完成多線程必需繼續Thread類或是繼續Runnable接口
實例4:Thread類的匿名外部類完成
public class Demo {
public static void main(String[] args) {
Thread t = new Thread() {
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.print(i + " ");
}
}
};
t.start();
}
}
運轉成果:1 2 3 4 5
實例5:Runnable接口的匿名外部類完成
public class Demo {
public static void main(String[] args) {
Runnable r = new Runnable() {
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.print(i + " ");
}
}
};
Thread t = new Thread(r);
t.start();
}
}
運轉成果:1 2 3 4 5