很早就知道匿名內部類,但沒去**,後面也沒用到,索性算個知識盲點,今天順便研究下。匿名內部類,顧名思義,沒有名字的內部類。
存在即合理,那匿名內部類的使用場景是什麼呢,如果實現父類(或繼承介面的)實現類只在業務中被呼叫一次,也即只使用一次,那麼它的存在就是有點尷尬的,只為了一部分的要求而單獨寫個類這在工程上也不合理,那麼此刻,為了解決這種尷尬,匿名內部類就被引入了。看個例子,加深理解吧。
使用匿名內部類之前:
//抽象父類
public
abstract
class
animal
//繼承類
public
class
dogextends
animal
} //繼承類的使用
public
class
demo
}
使用匿名內部類:
//抽象類
public
abstract
class animal
//匿名內部類使用
public
class demo
};p.eat();
}}
使用時需要注意幾點:
1.必須繼承乙個抽象類或實現乙個介面,並且僅只能繼承乙個抽象類或實現乙個介面。
2. 匿名內部類不是抽象的,所以需要實現介面或抽象類所有的抽象方法。
3. 不存在靜態成員變數、靜態方法、建構函式。
那麼不存在建構函式,匿名內部類怎麼傳參呢?外面的引數是可以直接傳進來的,匿名內部類是可以讀取的,但是匿名內部類裡對引數的改變並不會影響外部引數的改變,所以為了引數一致性,編譯器要求傳參定義為final型別。舉個例子吧,還是剛才的**,修改一下,如下:
public
class demo
public
void
display(final string food)
};p.eat();
}}
有名內部類和匿名內部類的用法
1 分類 有名內部類分為靜態的和非靜態的 2 用法 public class test 有名靜態內部類 static class tt public static void main string args 1 定義 沒有名字的類,不能單獨存在 2 用法 一定和創造物件一起存在 建立方法 new 父...
內部類,匿名內部類
內部類 概念 自己想到的 內部類是一種可以直接訪問外部類的一類事物 內部類訪問外部類中的成員,包括私有。之所以可以訪問外部類的成員,是因為內部類持有了外部類的乙個引用,格式為 outer.this.x 外部類訪問內部類成員,需要宣告內部類的物件。其他類訪問內部類方法 當內部類處在成員變數的位置時,就...
內部類 匿名內部類
把類定義在其他類的內部,這個類就叫內部類。內部類分為 成員內部類 區域性內部類。內部類訪問特點 內部類可以直接訪問外部類的成員,包括私有。外部類訪問內部類的成員,必須建立物件。區域性內部類是定義在乙個方法或者乙個作用域裡面的類。public class outer 在區域性位置建立內部類物件,調內部...