匿名內部類也就是沒有名字的內部類,正因為沒有名字,所以匿名內部類只能使用一次,它通常用來簡化代碼編寫。
但使用匿名內部類還有個前提條件:必須繼承一個父類或實現一個接口
1、繼承一個父類的匿名內部類實現:
abstract class People { public abstract void eat(); } public class Demo { public static void main(String[] args) { People p = new People() { public void eat() { System.out.println("I can eat "); } }; p.eat(); } }
2、在接口上使用匿名內部類:
interface People { public void eat(); } public class Demo { public static void main(String[] args) { People p = new People() { public void eat() { System.out.println("I can eat "); } }; p.eat(); } }
此處 new People( )看似實例化了一個接口,事實並非如此,接口式的匿名內部類是實現了一個接口的匿名類。而且只能實現一個接口。
ps再來說一下線程創建的兩種方式:
(1)繼承Thread類的方式因為耦合性太強,所以一般吧用。
(2)常用實現Runnable接口的創建線程方式。
但是我們更喜歡用匿名內部類的方式來創建一個線程。代碼如下:
new Thread(new Runnable() { @Override public void run() { int i=0; while(true){ i++; System.out.println("this is 線程"+i); } } }).start();
就這一句話就可以創建並且啟動一個線程,相對來說比較方便。而且特別直觀易懂。
此處的new Runnable( )並沒有實例化了一個接口,切記切記!!!!