這一章又長又難,sign,挺過這一章估計就輕松點了
          1. 內(nèi)部類可以訪問外圍類的所有元素,包括private字段,原因在于內(nèi)部類對象保存了一個指向外圍類對象的引用。因此內(nèi)部類的對象只能在與其外部類的對象相關(guān)聯(lián)的情況下才能被創(chuàng)建。構(gòu)建內(nèi)部類對象時,需要一個指向其外圍類對象的引用。
          2. 嵌套類(nested)
          如果不需要內(nèi)部類對象與外圍類對象有聯(lián)系,可以將內(nèi)部類聲明為static,稱為嵌套類。普通的內(nèi)部類對象隱式地保存了一個引用,指向創(chuàng)建它的外部類對象。然而,當(dāng)內(nèi)部類是static時,就不是這樣了。這意味著:
          1)要創(chuàng)建嵌套類的對象,并不需要外圍類的對象。
          2)不能從嵌套類的對象中訪問非靜態(tài)的外圍類對象。
          嵌套類與普通內(nèi)部類的另一個區(qū)別在于,普通內(nèi)部類的字段與方法,只能放在類的外部層次上,所以普通的內(nèi)部類不能有static數(shù)據(jù)和static字段,也不能包含嵌套類,但是嵌套類可以包含所有的這些東西(不怎么理解誒)
          另外,正常情況下,不能在接口內(nèi)部放置任何代碼,但由于嵌套類是static的,因此可以作為接口的一部分。
          在每個類中寫一個main()方法,可以用來測試這個類,但這樣會在編譯時產(chǎn)生額外的內(nèi)容。可以使用嵌套類防止測試代碼
          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();
          }
          }
          } ///:~
          發(fā)布的時候刪除TestBed$Tester.class即可
          3. 引用外部類的對象
          外圍類名稱 + ".this"
          要創(chuàng)建非靜態(tài)內(nèi)部類,必須使用外圍類的對象:
          Parcel11 p = new Parcel11();
          Parcel11.Contents c = p.new Contents();
          4. 多層嵌套類
          類比二層的嵌套類即可
          注意這里有個名次混淆的地方,非static類也可以嵌套起來使用,但是非static類內(nèi)部就不能有static類了。
          5. 內(nèi)部類的繼承
          內(nèi)部類指向外圍類的隱藏引用必須被初始化
          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. 內(nèi)部類的覆蓋
          繼承某個外圍類的時候,內(nèi)部類并不會發(fā)生變化,即使“重寫”了內(nèi)部類代碼。不過可以用Thinking in Java上介紹的,明確繼承某個內(nèi)部類。
          7. 為什么要用內(nèi)部類
          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.”
          使用內(nèi)部類最吸引人的原因是:
          每個內(nèi)部類都能獨立地繼承一個(接口的)實現(xiàn),所以無論外圍類是否已經(jīng)繼承某個(接口的)實現(xiàn),對于內(nèi)部類都沒有影響。
          由此可見,接口解決了部分問題,而內(nèi)部類有效地實現(xiàn)了“多重繼承”。
          8. 閉包與回調(diào) Closure & Callbacks
          閉包是一個可調(diào)用的對象,它記錄了一些信息,這些信息來自于創(chuàng)建它的作用域。由此可見內(nèi)部類是面向?qū)ο蟮拈]包。通過內(nèi)部類提供閉包的功能是完美的解決方案,它比指針更靈活、安全。
          9, 內(nèi)部類與控制框架
          太難了,跳掉。。。

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

          2.21 Java notes - Interfaces & Inner Classes

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 江孜县| 朝阳区| 两当县| 枞阳县| 读书| 青田县| 广州市| 涪陵区| 高雄市| 平泉县| 湾仔区| 邯郸市| 东丽区| 贵南县| 广灵县| 开鲁县| 太谷县| 宽城| 石棉县| 云浮市| 平湖市| 深州市| 敦煌市| 东乡族自治县| 长乐市| 壶关县| 东安县| 邳州市| 东兴市| 宁城县| 邵东县| 综艺| 高安市| 申扎县| 冀州市| 磴口县| 永城市| 英吉沙县| 大埔县| 永登县| 革吉县|