1. 程式人生 > >java內部類的例項化

java內部類的例項化

一、例項化內部類

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() {}
    };
  }
}