Java-InnerClass-03

來源:互聯網
上載者:User
Java內部類:名字隱藏+程式碼群組織
當產生一個內部類的對象時,此對象與製造它的外圍對象(enclosing object)之間就有了一種聯絡:它能訪問其外圍對象的所有成員,而不需要任何條件.此外,內部類還擁有其外圍類的所有元素的訪問權.
為什麼內部類會自動擁有對其外圍類所有成員的訪問權:當外圍類的對象建立了一個內部類對象時(內部類的對象只能在與其外圍類的對象相關聯的情況下才能被建立.構建內部類對象時,需要一個指向其外圍類對象的引用,如果編譯器訪問不到這個引用就會報錯),此內部類對象必定會儲存一個指向外圍類對象的引用.然後,在你訪問此外圍類的成員時,就是用那個"隱藏的"引用來選擇外圍類的成員.interface Selector...{
    boolean isEnd();
    Object current();
    void next();
}
/**//*Sequence類只產生了一個Object數組,Selector介面:檢查序列是否到末尾;查看當前對象;移到序列中下一個對象(這是一個完整的操作,所以設定為獨立模組).*/
class Sequence...{
    private int next = 0;
    private Object obj[];
    Sequence(int size)...{
        obj = new Object[size];
    }
    public void addToSequence(Object element)...{
        if(next<obj.length)
            obj[next++] = element;
            /**//*因為數組是Object的,所以要把int型的element轉換成一個對象,String是一種對象,而Object是所以對象的基類,所以上面代碼屬於向上轉型.*/
    }
    private class SSelector implements Selector...{
        private int i = 0;
        public boolean isEnd()...{return i == obj.length;}
        public Object current()...{return obj[i];}
        public void next()...{if(i<obj.length)i++;}
        /**//*三個方法都引用了外圍類中的obj欄位*/
    }
    public Selector getSelector()...{
        return new SSelector();
    }
}
class TestSequence...{
    public static void main(String[] args) ...{
        Sequence sequence = new Sequence(10);
        Selector selector = sequence.getSelector();
        for(int i=0;i<10;i++)
            sequence.addToSequence(Integer.toString(i));
        while(!selector.isEnd())...{
            System.out.println(selector.current());
            selector.next();
        }
    }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.