乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Java內(nèi)部類總結(jié)

       jc楓彩 2012-12-21

      Java內(nèi)部類總結(jié)

      分類: Java 6712人閱讀 評(píng)論(2) 收藏 舉報(bào)

       

      內(nèi)部類:

      1,概述
      內(nèi)部類是指在一個(gè)外部類的內(nèi)部再定義一個(gè)類。
      內(nèi)部類作為外部類的一個(gè)成員,并且依附于外部類而存在的。
      內(nèi)部類可為靜態(tài),可用PROTECTED和PRIVATE修飾。(而外部類不可以:外部類只能

      使用PUBLIC和DEFAULT)。

      2,分類
      成員內(nèi)部類、
      局部?jī)?nèi)部類、
      靜態(tài)內(nèi)部類、
      匿名內(nèi)部類(圖形是要用到,必須掌握)。

      3,使用方法

      A,成員內(nèi)部類:
      作為外部類的一個(gè)成員存在,與外部類的屬性、方法并列。

      public class Outer {
       private static int i = 1;
       private int j = 10;
       private int k = 20;
       public static void outer_f1(){
       
       }
       public void outer_f2(){
       
       }
       
      // 成員內(nèi)部類中,不能定義靜態(tài)成員
      // 成員內(nèi)部類中,可以訪問(wèn)外部類的所有成員
       class Inner{
      //  static int inner_i = 100;//內(nèi)部類中不允許定義靜態(tài)變量
        int j=100; //內(nèi)部類和外部類的實(shí)例變量可以共存
        int inner_i = 1;
        void inner_f1(){
         System.out.println(i);
         System.out.println(j);//在內(nèi)部類中訪問(wèn)內(nèi)部類自

      己的變量直接用變量名
         System.out.println(this.j);//或者用this.變量名
         System.out.println(Outer.this.j);//在內(nèi)部類中

      訪問(wèn)外部類中與內(nèi)部類同名的實(shí)例變量用 外部類名.this.變量名
         System.out.println(k);//如果內(nèi)部類中沒(méi)有與外部

      類同名的變量,則可以直接用變量名訪問(wèn)外部類變量
         outer_f1();
         outer_f2();
        
        }
       }
      // 外部類的非靜態(tài)方法訪問(wèn)成員內(nèi)部類
       public void outer_f3(){
        Inner inner = new Inner();
        inner.inner_f1();
       }
       
       //外部類的靜態(tài)方法訪問(wèn)成員內(nèi)部類,與在外部類外部訪問(wèn)成員內(nèi)部類一


       public static void outer_f4(){
      //  step1 建立外部類對(duì)象
        Outer out = new Outer();
      //  step2 根據(jù)外部類對(duì)象建立內(nèi)部類對(duì)象
        Inner inner = out.new Inner();
      //  step3 訪問(wèn)內(nèi)部類的方法
        inner.inner_f1();
       }

       public static void main(String[] args) {
        outer_f4();
       }

      }

      成員內(nèi)部類的優(yōu)點(diǎn):
      ⑴內(nèi)部類作為外部類的成員,可以訪問(wèn)外部類的私有成員或?qū)傩?。(即使將外部類?/p>

      明為PRIVATE,但是對(duì)于處于其內(nèi)部的內(nèi)部類還是可見(jiàn)的。)
      ⑵用內(nèi)部類定義在外部類中不可訪問(wèn)的屬性。這樣就在外部類中實(shí)現(xiàn)了比外部類的

      private還要小的訪問(wèn)權(quán)限。
      注意:內(nèi)部類是一個(gè)編譯時(shí)的概念,一旦編譯成功,就會(huì)成為完全不同的兩類。
      對(duì)于一個(gè)名為outer的外部類和其內(nèi)部定義的名為inner的內(nèi)部類。編譯完成后出現(xiàn)

      outer.class和outer$inner.class兩類。

      注意:當(dāng)Outer是一個(gè)private類時(shí),外部類對(duì)于其外部訪問(wèn)是私有的,所以就無(wú)法

      建立外部類對(duì)象,進(jìn)而也無(wú)法建立內(nèi)部類對(duì)象。


      B,局部?jī)?nèi)部類
      在方法中定義的內(nèi)部類稱為局部?jī)?nèi)部類。
      與局部變量類似,在局部?jī)?nèi)部類前不加修飾符public和private,其范圍為定義它的

      代碼塊。

      public class Outer {
       private int s = 100;
       private int out_i = 1;
       public void f(final int k){
        final int s = 200;
        int i = 1;
        final int j = 10;
        class Inner{//定義在方法內(nèi)部
         int s = 300;//可以定義與外部類同名的變量
         //static int m = 20;//不可以定義靜態(tài)變量
         Inner(int k){
          inner_f(k);
         }
         int inner_i = 100;
         void inner_f(int k){
          System.out.println(out_i);//如果內(nèi)部類

      沒(méi)有與外部類同名的變量,在內(nèi)部類中可以直接訪問(wèn)外部類的實(shí)例變量
          System.out.println(k);//可以訪問(wèn)外部類

      的局部變量(即方法內(nèi)的變量),但是變量必須是final的
      //    System.out.println(i);
          System.out.println(s);//如果內(nèi)部類中有

      與外部類同名的變量,直接用變量名訪問(wèn)的是內(nèi)部類的變量
          System.out.println(this.s);//用this.變

      量名 訪問(wèn)的也是內(nèi)部類變量
          System.out.println(Outer.this.s);//用

      外部類名.this.內(nèi)部類變量名 訪問(wèn)的是外部類變量
         }
        }
        new Inner(k);
       }

       public static void main(String[] args) {
       //訪問(wèn)局部?jī)?nèi)部類必須先有外部類對(duì)象
        Outer out = new Outer();
        out.f(3);
       }

      }

      注意:
      在類外不可直接生成局部?jī)?nèi)部類(保證局部?jī)?nèi)部類對(duì)外是不可見(jiàn)的)。
      要想使用局部?jī)?nèi)部類時(shí)需要生成對(duì)象,對(duì)象調(diào)用方法,在方法中才能調(diào)用其局部?jī)?nèi)部

      類。
      通過(guò)內(nèi)部類和接口達(dá)到一個(gè)強(qiáng)制的弱耦合,用局部?jī)?nèi)部類來(lái)實(shí)現(xiàn)接口,并在方法中返

      回接口類型,使局部?jī)?nèi)部類不可見(jiàn),屏蔽實(shí)現(xiàn)類的可見(jiàn)性。

      C,靜態(tài)內(nèi)部類:(注意:前三種內(nèi)部類與變量類似,所以可以對(duì)照參考變量)
      靜態(tài)內(nèi)部類定義在類中,任何方法外,用static定義。

      public class Outer {
       private static int i = 1;
       private int j = 10;
       public static void outer_f1(){
       
       }
       public void outer_f2(){
       
       }
      // 靜態(tài)內(nèi)部類可以用public,protected,private修飾
      // 靜態(tài)內(nèi)部類中可以定義靜態(tài)或者非靜態(tài)的成員
       static class Inner{
        static int inner_i = 100;
        int inner_j = 200;
        static void inner_f1(){
         System.out.println("Outer.i"+i);//靜態(tài)內(nèi)部類只

      能訪問(wèn)外部類的靜態(tài)成員
         outer_f1();//包括靜態(tài)變量和靜態(tài)方法
        }
        void inner_f2(){
      //   System.out.println("Outer.i"+j);//靜態(tài)內(nèi)部類不

      能訪問(wèn)外部類的非靜態(tài)成員
      //   outer_f2();//包括非靜態(tài)變量和非靜態(tài)方法
        }
       
       
       }
       
       public void outer_f3(){
      //  外部類訪問(wèn)內(nèi)部類的靜態(tài)成員:內(nèi)部類.靜態(tài)成員
        System.out.println(Inner.inner_i);
        Inner.inner_f1();
      //  外部類訪問(wèn)內(nèi)部類的非靜態(tài)成員:實(shí)例化內(nèi)部類即可
        Inner inner = new Inner();
        inner.inner_f2();
       
       }
       public static void main(String[] args) {
        new Outer().outer_f3();
       }

      }


      生成(new)一個(gè)靜態(tài)內(nèi)部類不需要外部類成員:這是靜態(tài)內(nèi)部類和成員內(nèi)部類的區(qū)

      別。靜態(tài)內(nèi)部類的對(duì)象可以直接生成:
      Outer.Inner in=new Outer.Inner();
      而不需要通過(guò)生成外部類對(duì)象來(lái)生成。這樣實(shí)際上使靜態(tài)內(nèi)部類成為了一個(gè)頂級(jí)類。
      靜態(tài)內(nèi)部類不可用private來(lái)進(jìn)行定義。例子:
      對(duì)于兩個(gè)類,擁有相同的方法:
      People
      {
        run();
      }
      Machine{
         run();
      }
      此時(shí)有一個(gè)robot類:
      class Robot extends People implement Machine.
      此時(shí)run()不可直接實(shí)現(xiàn)。
      注意:當(dāng)類與接口(或者是接口與接口)發(fā)生方法命名沖突的時(shí)候,此時(shí)必須使用內(nèi)

      部類來(lái)實(shí)現(xiàn)。
      用接口不能完全地實(shí)現(xiàn)多繼承,用接口配合內(nèi)部類才能實(shí)現(xiàn)真正的多繼承。

      D,匿名內(nèi)部類
      匿名內(nèi)部類是一種特殊的局部?jī)?nèi)部類,它是通過(guò)匿名類實(shí)現(xiàn)接口。
      IA被定義為接口。
      IA I=new IA(){};

      匿名內(nèi)部類的特點(diǎn):

      1,一個(gè)類用于繼承其他類或是實(shí)現(xiàn)接口,并不需要增加額外的方法,只是對(duì)繼承方法的事先或是覆蓋。
      2,只是為了獲得一個(gè)對(duì)象實(shí)例,不許要知道其實(shí)際類型。
      3,類名沒(méi)有意義,也就是不需要使用到。

      public class Outer {
       private static int i = 1;
       private int j = 10;
       public static void outer_f1(){
       
       }
       public void outer_f2(){
       
       }
      // 靜態(tài)內(nèi)部類可以用public,protected,private修飾
      // 靜態(tài)內(nèi)部類中可以定義靜態(tài)或者非靜態(tài)的成員
       static class Inner{
        static int inner_i = 100;
        int inner_j = 200;
        static void inner_f1(){
         System.out.println("Outer.i"+i);//靜態(tài)內(nèi)部類只

      能訪問(wèn)外部類的靜態(tài)成員
         outer_f1();//包括靜態(tài)變量和靜態(tài)方法
        }
        void inner_f2(){
      //   System.out.println("Outer.i"+j);//靜態(tài)內(nèi)部類不

      能訪問(wèn)外部類的非靜態(tài)成員
      //   outer_f2();//包括非靜態(tài)變量和非靜態(tài)方法
        }
       }
       
       public void outer_f3(){
      //  外部類訪問(wèn)內(nèi)部類的靜態(tài)成員:內(nèi)部類.靜態(tài)成員
        System.out.println(Inner.inner_i);
        Inner.inner_f1();
      //  外部類訪問(wèn)內(nèi)部類的非靜態(tài)成員:實(shí)例化內(nèi)部類即可
        Inner inner = new Inner();
        inner.inner_f2();
       
       }
       public static void main(String[] args) {
        new Outer().outer_f3();
       }

      }

      注:一個(gè)匿名內(nèi)部類一定是在new的后面,用其隱含實(shí)現(xiàn)一個(gè)接口或?qū)崿F(xiàn)一個(gè)類,沒(méi)

      有類名,根據(jù)多態(tài),我們使用其父類名。
      因其為局部?jī)?nèi)部類,那么局部?jī)?nèi)部類的所有限制都對(duì)其生效。
      匿名內(nèi)部類是唯一一種無(wú)構(gòu)造方法類。
      大部分匿名內(nèi)部類是用于接口回調(diào)用的。
      匿名內(nèi)部類在編譯的時(shí)候由系統(tǒng)自動(dòng)起名Out$1.class。
      如果一個(gè)對(duì)象編譯時(shí)的類型是接口,那么其運(yùn)行的類型為實(shí)現(xiàn)這個(gè)接口的類。
      因匿名內(nèi)部類無(wú)構(gòu)造方法,所以其使用范圍非常的有限。
      當(dāng)需要多個(gè)對(duì)象時(shí)使用局部?jī)?nèi)部類,因此局部?jī)?nèi)部類的應(yīng)用相對(duì)比較多。匿名內(nèi)部類

      中不能定義構(gòu)造方法。如果一個(gè)對(duì)象編譯時(shí)的類型是接口,那么其運(yùn)行的類型為實(shí)現(xiàn)

      這個(gè)接口的類。
      因匿名內(nèi)部類無(wú)構(gòu)造方法,所以其使用范圍非常的有限。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多