1. 程式人生 > 實用技巧 >java之匿名類

java之匿名類

匿名內部類(類沒有名字):

  1.內部類定義:

    內部類:在類的內部又定義了一個新的類,被稱為內部類

  2.內部類的分類:

    靜態內部類:類似於靜態變數

    例項內部類:類似於例項變數

    區域性內部類:類似於區域性變數

  3.使用內部類編寫的程式碼,可讀性很差,能不用盡量不用。

  4.匿名內部類是區域性內部類的一種。因為這個類沒有名字而得名,叫做匿名內部類。

  5.學習匿名內部類主要是讓大家以後在閱讀別人程式碼的時候可以理解。並不代表以後都要這樣寫,因為有兩個缺點

    1.太複雜,太亂,可讀性差

    2.類沒有名字,以後想重複使用不可以用

首先看兩個程式碼如何引進匿名類:

public class Test01 {
    public static void main(String[] args) {
        //呼叫MyMath中的mySum方法
        Mymath mm = new Mymath();
        mm.mysum(new ComputerImpl(),100,200);
    }
    //靜態變數
    static String country;
    //該類在類的內部,所以稱為內部類
    //由於前面有static,所以稱為"靜態內部類"
    static class Inner{

    }

    //該類在類的內部,所以稱為內部類
    
//沒有static叫做實力內部類 class Inner2{ } //方法 public void doSome(){ //區域性變數 int i = 100; //該類在類的內部,所以稱為內部類 //區域性內部類 class Inner3{ } } public void doOther(){ //doSome()方法中的區域性內部類,在doSome中不可以用 } } class Mymath{ //數學求和方法,Computer是一個引用型別可以看成 String c。這樣好理解
public void mysum(Computer c, int x,int y){ int reValue = c.sum(x,y); System.out.println(x+"+"+y+"="+reValue); } } //實現接口裡的方法 class ComputerImpl implements Computer{ public int sum(int a, int b) { return a + b; } }
public interface Computer {
    //抽象方法
    int sum(int a, int b);
}

看了上面的程式碼,看如何引進匿名類:

public class Test01 {
    public static void main(String[] args) {
        //呼叫MyMath中的mySum方法
        Mymath mm = new Mymath();
        //合併(這樣寫程式碼表示這個類是有的,類名是:ComputerImpl)
        //mm.mysum(new ComputerImpl(),100,200);
        //使用匿名內部類,表示這個ComputerImpl這個類沒有名字
        //這裡表面上看上去是直接new 介面,實際上並不是介面可以new了,後面的{}大括號代表對介面的實現.
        mm.mysum(new Computer() {
            public int sum(int a, int b) {
                return a + b;
            }
        },100,200);
    }
   class Mymath{
    //數學求和方法
    public void mysum(Computer c, int x,int y){
        int reValue = c.sum(x,y);
        System.out.println(x+"+"+y+"="+reValue);
    }

}

class ComputerImpl implements Computer{

    public int sum(int a, int b) {
        return a + b;
    }
}

一般不建議使用內部類:因為一個類沒有名字,不可以重複使用,另外程式碼太亂,可讀性太差