keep moving!

          We must not cease from exploration. And the end of all our exploring will be to arrive where we began and to know the place for the first time.
          隨筆 - 37, 文章 - 2, 評論 - 3, 引用 - 0
          數(shù)據(jù)加載中……

          java內(nèi)部類2

          1.定義:在一個類中定義另外一個類,這個類就叫做內(nèi)部類或內(nèi)置類 (inner class)
          2幾個特性
          1.可以訪問其外部類用private修飾的變量或是方法
              例子:

              class Outer
             {
               private String str="kingtoon";
                class Inner
                {
                  void printInner()
                 {
                   System.out.println(str);
                 }
                }
              Inner getInner()
              {
                 return new Inner();
              }
          }
          class InnerClassTest
          {
          public static void main(String []args)
          {
             Outer outer=new Outer();
             Outer.Inner inner=outer.getInner();
             inner.printInner();
          }
          }
          2.this關(guān)鍵字
              “當我們建立一個inner class時,其對象就擁有了與外部類對象之間的一種關(guān)系,這是通過一個特殊的this reference形成的,使得內(nèi)部類對象可以隨意的訪問外部類中所有的成員”(包括private變量和方法)。

          例子:

          class Outer
          {
          private String str="kingtoon";
          class Inner
          {
             String str="hjd";
             void printInner()
             {
              String str="kingtoon_hjd";
             System.out.println(str);
              System.out.println(this.str);
              System.out.println(Outer.this.str);
             }
          }

          Inner getInner()
          {
             return new Inner();
          }
          }
          class InnerClassTest
          {
          public static void main(String []args)
          {
             Outer outer=new Outer();
             Outer.Inner inner=outer.getInner();
             inner.printInner();
          }
          }
             3.外部類訪問內(nèi)部類成員變量或其函數(shù)的兩種方法
                第一種:

               class Outer
              {
                private String str="kingtoon";
                class Inner
               {
                  void printInner()
                  {
                    System.out.println(str);
                 }
             }
          }
          class InnerClassTest
          {
          public static void main(String []args)
          {
             Outer outer=new Outer();
            Outer.Inner inner= outer.new Inner();
             inner.printInner();
          }
          }

              第二種

          class Outer
          {
          private String str="kingtoon";
          class Inner
          {
             void printInner()
             {
              System.out.println(str);
             }
          }

          Inner getInner()
          {
             return new Inner();
          }
          }
          class InnerClassTest
          {
          public static void main(String []args)
          {
             Outer outer=new Outer();
            Outer.Inner inner=outer.getInner();
             inner.printInner();
          }
          }

          4.在外部類的某方法內(nèi)部定義內(nèi)部類,內(nèi)部類的某方法里只能訪問外部類方法里由final聲明的變量或參數(shù)。例子:

          class Outer
          {

               void printOuter(final int n)
               {
               final String str="kingtoon";
                class Inner
                {
                 void printInner()
                 {
                  System.out.println(str);
                  System.out.println(n);
                 }
                }
               }
          }

          5.其實,使用內(nèi)部類,主要和接口同時使用,可以讓java實現(xiàn)多繼承。

          例如:

          interface A
          {
          void printA();
          }
          class B
          {
          void printB()
          {
             System.out.println("b");
          }
          }
          class C extends B
          {
          A getA()
          {
             return new A()
             {
              public void printA()
              {
               System.out.println("a");
              }
             };
          }
          }
          class Interface_extends_inner
          {
          static void fn1(A a)
          {
               System.out.println("A");
          }
          static void fn2(B b)
          {
             System.out.println("B");
          }
          public static void main(String []args)
          {
            
             C c=new C();
             A a=c.getA();
             a.printA();
             c.printB();
             fn1(a);//fn1(c.getA());  

             fn2(new B());
          }
          }

          6.內(nèi)部類可以解決方法同名的情況

          例如:

          interface Machine
          {
          void run();
          }
          class Person
          {
          void run()
          {
             System.out.println("現(xiàn)在,我可以跑了");
          }
          }
          class Robot extends Person
          {
          private class MachineHeart implements Machine
          {
             public void run()
             {
              System.out.println("機器引擎啟動了");
             }
          }
          MachineHeart getMachinHeart()
          {
             return new MachineHeart();
          }
          }
          class Fangfatongming_inner
          {
          public static void main(String [] args)
          {
             Robot robot=new Robot();
             Machine machine=robot.getMachinHeart();
             machine.run();
             robot.run();
          }
          }
               此外,內(nèi)部類可以聲明為private或protected;還可以聲明為abstract或final(類似于方法的訪問權(quán)限)。
               還有,內(nèi)部類可以聲明為static的,但此時就不能再使用外部類的非static的成員變量和非static的成員方法;非static的內(nèi)部類中的成員不能聲明為static的,只有在頂層類或static的內(nèi)部類中才可聲明static成員.

          一點說明:參考資料《java無難事》Author孫鑫

          posted on 2008-09-07 11:42 大石頭 閱讀(213) 評論(0)  編輯  收藏 所屬分類: 基礎

          主站蜘蛛池模板: 揭东县| 瑞金市| 富顺县| 依安县| 南汇区| 通渭县| 思茅市| 新巴尔虎左旗| 乡城县| 凉城县| 嘉黎县| 高碑店市| 德令哈市| 新源县| 曲阳县| 蒙城县| 夏邑县| 得荣县| 尉氏县| 麻城市| 铅山县| 东辽县| 西贡区| 洛川县| 常德市| 横峰县| 治县。| 海原县| 建阳市| 共和县| 宣恩县| 凤翔县| 闻喜县| 剑河县| 红桥区| 玉环县| 庆云县| 沙洋县| 富宁县| 龙里县| 黔西县|