java內部類的例項化
阿新 • • 發佈:2018-12-26
一、例項化內部類
java中的內部類如何例項化?例子:
public class Animal{
class Head{
}
}
測試如何例項化內部類:
public class TestInstanceInnerClass{
public TestInstanceInnerClass(){
Animal animal = new Animal();//首先例項化外部類
Head head = animal.new Head();//把內部類當成一個成員變數進行例項化
}
}
內部類是如何例項化的呢?通過上面的小例子,可以得到如下的結論:內部類例項化可以使用Out.Innerclassinfo來引用,但是例項化呢?我們應該把內部類當成一個成員變數來使用;
正確方法:
這樣就可以例項化我們的內部類,就像使用我們的成員變數一樣使用。Out out = new Out(); out.new Inner();
如何不用外部類的例項就可以例項化內部類: 在上面的例子中,如果沒有一個外部類的例項,就不能例項化它的內部類,但是如果我們想直接例項化一個類的內部類應該如何做呢? 把內部類做成靜態類便可以:
class People{
static class Head{}
}
main(){
People.Head head=People.Head();//這樣就可以直接例項化內部類而不用例項化外部類
}
我們可以拿靜態內部類做些什麼呢,我們可以用內部類封裝一個外部類所需要的資料,如下: 如果我們在一個介面類中需要顯示一個ListView,這個ListView中我們需要一個固定的資料,因為每個item的資料是固定的,我們可以為這個Item做一個專用的物件,於是我們就在這個類中寫了一個專用物件,這樣我們在外部的話直接例項化這個內部物件,封裝好傳入即可,這樣的話這個顯示介面對使用者是透明的,使用者在呼叫的時候無需知道這個類中的具體的實現方法,直接把一個內部類的list傳入,這個介面類就會自動的解析,做到了黑盒效果,降低了程式的偶合性。 二、例項化內部介面: 例項化一個內部類的有兩種方式: 一種是擁有外部類的物件再例項化這個內部類, 另外一種是把內部類做成一個靜態的類,這樣就沒有必要擁有了外部類的例項,方便例項化。 而例項化一個類中的介面呢? 請看下面的Demo:
class View { interface OnClickLinstener{//內部介面 public void onClick(); } class OnClickLis{}//內部類 } class Widget{ public void init(final int a){ //內部介面就可以直接用 外部類.內部類來例項化,而內部類就不行了 View.OnClickLinstener linstener=new View.OnClickLinstener(){ @Override public void onClick() {} }; } }