我一直相信對於知識:如果你看不懂,不怪你,請相信,一定是作者沒有把問題說清楚。看了本文章你將知道什麼是匿名內部類,如何熟練掌握並使用匿名內部類。如果你已經是大牛可以跳過,沒有看的必要。
先說類,我們都知道類用於描述客觀世界裡某一類物件的共同特徵,物件是其具體體現。類可以被被認為是一種自定義的資料型別,可以使用類來定義變數。也就是所說的類型別,是一種引用資料型別。
如果在乙個類裡面定義乙個類,那麼這個類就是內部類,外面的那個類就是外部類,這個很好理解。內部類就相當於外部類的乙個成員,你可以把內部類看成乙個整體。內部類分為:靜態內部類,非靜態內部類。匿名內部類是非靜態內部類的一種特殊情況,匿名內部類沒有類名,因此就不可能有建構函式,不能建立物件。除此之外還有區域性內部類,就是定義在方法內的,這個一般不怎麼用,不需要掌握,知道就好,本文主要說匿名內部類,其他內部類以後會說。
說白了,就是因為想偷懶,不想寫太多**。如果可以,程式設計師完全可以通過實現介面或者繼承抽象類的方式來實現而不用建立匿名內部類。但是使用匿名內部類的優點是顯而易見的,可以少些**,而且**更加簡潔。
先看匿名內部類的定義的語法格式:
new 實現介面()
new 父類構造器(實參列表)
為什麼匿名內部類的定義有這兩種方式呢?這是因此這兩種方式的定義分別對應兩種方式,一種是介面,另一種是抽象類。
對於實現介面,由於介面是沒有建構函式的,注意這裡一定是空引數。
第二種是呼叫父類的構造器,注意此處可以是空引數,也可以傳入引數。
對於匿名內部類的使用,我將通過兩個具體的例子進行說明,如果你看懂了這兩個例子,就基本掌握了他的使用,建議多看幾遍例子。
第一種情況:實現介面
inte***nce product
上面**定義乙個介面,介面裡面兩個抽象方法
public class anonymous
public static void main(string [ ] args )
public string getname( )//實現方法
});}
}
上面**很簡單,就是定義了乙個類anonymous,在類裡定義了乙個test方法。然後就是建立anonymous物件,呼叫他的例項方法test()。
不過呼叫test()方法時,要傳入乙個product物件。但是由於product是乙個介面,無法建立物件,所以要實現該介面。因此此處採用匿名內部類的方式進行,並實現介面中全部的抽象方法!
內部類,匿名內部類
內部類 概念 自己想到的 內部類是一種可以直接訪問外部類的一類事物 內部類訪問外部類中的成員,包括私有。之所以可以訪問外部類的成員,是因為內部類持有了外部類的乙個引用,格式為 outer.this.x 外部類訪問內部類成員,需要宣告內部類的物件。其他類訪問內部類方法 當內部類處在成員變數的位置時,就...
內部類 匿名內部類
把類定義在其他類的內部,這個類就叫內部類。內部類分為 成員內部類 區域性內部類。內部類訪問特點 內部類可以直接訪問外部類的成員,包括私有。外部類訪問內部類的成員,必須建立物件。區域性內部類是定義在乙個方法或者乙個作用域裡面的類。public class outer 在區域性位置建立內部類物件,調內部...
內部類 匿名內部類
package org.lgy.study.innerclass public class anonymoustest public static void main string args public string getname public double getprice inte ce p...