先看下面代碼
Test.java
public class Test { public static void main(String[] args) { A a=new A() { @Override void ceshi() { System.out.println(ceshi); } }; a.ceshi(); new B() { @Override public void ceshi() { System.out.println(ceshi); } }.ceshi(); } }
A.java
public abstract class A { public String ceshi="as"; abstract void ceshi(); }
B.java
public interface B { public String ceshi = "1234"; public void ceshi(); }
運行輸出:
as
1234
分析:是匿名內部類的寫法,看着像實例化了抽象類和接口一樣。
A a=new A(){}是定義了一個內部類繼承了抽象類A,B b=new B(){}是定義了一個內部類實現了接口B
參考資料:
java代碼:new 類名(){方法定義}應該如何理解?
原文:

new 類名(){方法定義} 這種寫法是匿名內部類。 1、匿名內部類就是沒有名字的內部類。這是Java為了方便程序員編寫程序,而設計的一個機制。因為有時候有的內部類只需要創建一個它的對象就可以了,以后再不會用到這個類,這時候使用匿名內部類就比較合適,而且也免去了給它取名字的煩惱。2、如果滿足下面的一些條件,使用匿名內部類是比較合適的: ·只用到類的一個實例。 ·類在定義后馬上用到。 ·類非常小(SUN推薦是在4行代碼以下) ·給類命名並不會導致你的代碼更容易被理解。 在使用匿名內部類時,要記住以下幾個原則: ·匿名內部類不能有構造方法。 ·匿名內部類不能定義任何靜態成員、方法和類。 ·匿名內部類不能是public,protected,private,static。 ·只能創建匿名內部類的一個實例。 ·一個匿名內部類一定是在new的后面,用其隱含實現一個接口或實現一個類。 ·因匿名內部類為局部內部類,所以局部內部類的所有限制都對其生效。 3、用匿名內部類創建多線程有兩種方式,和創建一個線程是一樣的。 第①種繼承Thread: new Thread(){ public void run(){ //do something }; }.start(); 第②種實現 Runnable接口: new Thread(new Runnable() { public void run() { //do something }; }) { }.start();