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)鍵字
              “當(dāng)我們建立一個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 大石頭 閱讀(212) 評論(0)  編輯  收藏 所屬分類: 基礎(chǔ)

          主站蜘蛛池模板: 南昌市| 延边| 凤山市| 星子县| 高青县| 仙居县| 兴业县| 汝州市| 张掖市| 龙泉市| 凤阳县| 南漳县| 普安县| 乳源| 邢台市| 高邮市| 瑞昌市| 阿拉善左旗| 秦皇岛市| 上高县| 湘潭县| 宜黄县| 铁岭县| 江源县| 大兴区| 离岛区| 同仁县| 沁阳市| 吉林市| 施甸县| 花垣县| 沧源| 永修县| 富宁县| 辽宁省| 札达县| 灌南县| 蕲春县| 盐亭县| 天津市| 沛县|