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類時。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.