這一章又長又難,sign,挺過這一章估計就輕松點了
          1. 內部類可以訪問外圍類的所有元素,包括private字段,原因在于內部類對象保存了一個指向外圍類對象的引用。因此內部類的對象只能在與其外部類的對象相關聯的情況下才能被創建。構建內部類對象時,需要一個指向其外圍類對象的引用。
          2. 嵌套類(nested)
          如果不需要內部類對象與外圍類對象有聯系,可以將內部類聲明為static,稱為嵌套類。普通的內部類對象隱式地保存了一個引用,指向創建它的外部類對象。然而,當內部類是static時,就不是這樣了。這意味著:
          1)要創建嵌套類的對象,并不需要外圍類的對象。
          2)不能從嵌套類的對象中訪問非靜態的外圍類對象。
          嵌套類與普通內部類的另一個區別在于,普通內部類的字段與方法,只能放在類的外部層次上,所以普通的內部類不能有static數據和static字段,也不能包含嵌套類,但是嵌套類可以包含所有的這些東西(不怎么理解誒)
          另外,正常情況下,不能在接口內部放置任何代碼,但由于嵌套類是static的,因此可以作為接口的一部分。
          在每個類中寫一個main()方法,可以用來測試這個類,但這樣會在編譯時產生額外的內容。可以使用嵌套類防止測試代碼
          public class TestBed {
          public TestBed() {}
          public void f() { System.out.println("f()"); }
          public static class Tester {
          public static void main(String[] args) {
          TestBed t = new TestBed();
          t.f();
          }
          }
          } ///:~
          發布的時候刪除TestBed$Tester.class即可
          3. 引用外部類的對象
          外圍類名稱 + ".this"
          要創建非靜態內部類,必須使用外圍類的對象:
          Parcel11 p = new Parcel11();
          Parcel11.Contents c = p.new Contents();
          4. 多層嵌套類
          類比二層的嵌套類即可
          注意這里有個名次混淆的地方,非static類也可以嵌套起來使用,但是非static類內部就不能有static類了。
          5. 內部類的繼承
          內部類指向外圍類的隱藏引用必須被初始化
          class WithInner {
          class Inner {}
          }
          public class InheritInner extends WithInner.Inner {
          //! InheritInner() {} // Won't compile
          InheritInner(WithInner wi) {
          wi.super();
          }

          public static void main(String[] args) {
          WithInner wi = new WithInner();
          InheritInner ii = new InheritInner(wi);
          }
          }
          6. 內部類的覆蓋
          繼承某個外圍類的時候,內部類并不會發生變化,即使“重寫”了內部類代碼。不過可以用Thinking in Java上介紹的,明確繼承某個內部類。
          7. 為什么要用內部類
          If I just need a reference to an interface, why don’t I just make the outer class implement that interface? The answer is “If that’s all you need, then that’s how you should do it.”
          使用內部類最吸引人的原因是:
          每個內部類都能獨立地繼承一個(接口的)實現,所以無論外圍類是否已經繼承某個(接口的)實現,對于內部類都沒有影響。
          由此可見,接口解決了部分問題,而內部類有效地實現了“多重繼承”。
          8. 閉包與回調 Closure & Callbacks
          閉包是一個可調用的對象,它記錄了一些信息,這些信息來自于創建它的作用域。由此可見內部類是面向對象的閉包。通過內部類提供閉包的功能是完美的解決方案,它比指針更靈活、安全。
          9, 內部類與控制框架
          太難了,跳掉。。。

          posts - 403, comments - 310, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          2.21 Java notes - Interfaces & Inner Classes

          Posted on 2007-04-22 20:24 ZelluX 閱讀(165) 評論(0)  編輯  收藏
          2007-02-21 21:21:46
          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 故城县| 麻江县| 阜康市| 顺平县| 阳山县| 中卫市| 元谋县| 剑川县| 瑞丽市| 郓城县| 池州市| 拜泉县| 宣威市| 北票市| 康乐县| 金华市| 花莲市| 临邑县| 彩票| 沅陵县| 丰台区| 铜鼓县| 龙川县| 尉犁县| SHOW| 鹤岗市| 海门市| 乐陵市| 茶陵县| 灌阳县| 那坡县| 兴山县| 竹溪县| 南昌县| 松溪县| 民丰县| 定日县| 沂水县| 安泽县| 工布江达县| 澎湖县|