new Class{}形式


先看下面代碼

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();
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM