Java內部類學習筆記



 

  本文主要講述Java內部類學習筆記,更多Java技術知識,請登陸瘋狂軟件教育官網。加微信號瘋狂軟件,或者用微信搜索瘋狂軟件,參加2015年優惠活動,有機會獲得優惠劵和代金劵。

  一直以來認爲內部類只是名字隱藏和組織代碼的模式,今天從Java mindview中看到一些內部類的用法,當生成一個內 部類的對象時,此對象與製造它的外圍對象之間有了一種聯繫,所以它能訪問其外圍對象的所有成員,而不需要任何特 殊條件。下面用一個自定義的迭代類來說明這點:

  public interface Selector {

  public boolean end();

  public Object current();

  public void next();

  }

  public class Sequence {

  private Object[] items;

  private int next;

  public Sequence(int size){

  items = new Object[size];

  }

  public void add(Object x){

  if(next < items.length){

  items[next++] = x;

  }

  }

  private class SequenceSelector implements Selector{

  private int i = 0;

  @Override

  public boolean end() {

  return i == items.length;

  }

  @Override

  public Object current() {

  return items[i];

  }

  @Override

  public void next() {

  if(i < items.length){

  i++;

  }

  }

  }

  public Selector selector(){

  return new SequenceSelector();

  }

  public static void main(String args[]){

  Sequence sequence = new Sequence(20);

  for(int i = 0;i < 10; i ++){

  sequence.add(Integer.toString(i));

  }

  Selector selector = sequence.selector();

  while(!selector.end()){

  System.out.println(selector.current() + " ");

  selector.next();

  }

  }

  }

  Sequence類只是一個固定大小的Object數組,以類的形式包裝了起來。可以調用add()在序列末增加新的Object。要獲取到Sequence的每一個對象,可以使用Selector接口。Selector允許你 檢查序列是否到末尾了(end()),訪問當前對象(current()),以及移到序列中的下一個對象(next())。

  注意方法 end(),current(),next()都用到了objects,這是一個引用,並不是SequenceSelector的一部分,而是外圍類的一個字段。這是因爲當某個外圍類的對象創建了一個內部類的對象時,此內部類對象會祕密地捕獲一個指向那個外圍類對象的引用,當訪問此外圍類的成員時,就是用那個引用來選擇外圍類的成員。

  內部類的對象只能在與其外圍類的對象相關聯的情況下才能被創建,也即是內部類是非static類時。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章