<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                內部類:——成員內部類——局部內部類——匿名內部類 按照內部類在類中定義的位置不同,可以分為如下兩種格式: 成員位置(成員內部類) 局部位置(局部內部類) 成員內部類 外界如何創建對象 外部類名.內部類名 對象名 = 外部類對象.內部類對象; ### 成員內部類 內部類可以直接訪問外部類的成員,包括私有; 外部類要想訪問內部類的成員,必須創建對象;并且,(1)在B類訪問A類的內部類C,格式:A.C ?ac = new A().new C();——外部類.內部類 對象名 = 外部類對象.內部類對象(對象!前后都有括號)。(2)如果內部類C被static修飾以后,格式是:外部類名.內部類名 對象名 = new 外部類名.內部類名()(注意前面沒括號,后面有括號)。 ~~~ /* 成員內部類的修飾符: private 為了保證數據的安全性 static 為了方便訪問數據 注意:靜態內部類訪問的外部類數據必須用靜態修飾。 案例:我有一個人(人有身體,身體內有心臟。) class Body { private class Heart { public void operator() { System.out.println("心臟搭橋"); } } public void method() { if(如果你是外科醫生) { Heart h = new Heart(); h.operator(); } } } 按照我們剛才的講解,來使用一下 Body.Heart bh = new Body().new Heart(); bh.operator(); //加了private后,就不能被訪問了,那么,怎么玩呢? Body b = new Body(); b.method(); */ class Outer { private int num = 10; private static int num2 = 100; //內部類用靜態修飾是因為內部類可以看出是外部類的成員 public static class Inner { public void show() { //System.out.println(num); System.out.println(num2); } public static void show2() { //System.out.println(num); System.out.println(num2); } } } class InnerClassDemo { public static void main(String[] args) { //使用內部類 // 限定的新靜態類 //Outer.Inner oi = new Outer().new Inner(); //oi.show(); //oi.show2(); //成員內部類被靜態修飾后的訪問方式是: //格式:外部類名.內部類名 對象名 = new 外部類名.內部類名(); Outer.Inner oi = new Outer.Inner(); oi.show(); oi.show2(); //show2()的另一種調用方式 Outer.Inner.show2(); } } ~~~ ### 局部內部類 ~~~ /* 局部內部類 A:可以直接訪問外部類的成員 B:在局部位置,可以創建內部類對象,通過對象調用內部類方法,來使用局部內部類功能 面試題: 局部內部類訪問局部變量的注意事項? A:局部內部類訪問局部變量必須用final修飾 B:為什么呢? 局部變量是隨著方法的調用而調用,隨著調用完畢而消失。 而堆內存的內容并不會立即消失。所以,我們加final修飾。 加入final修飾后,這個變量就成了常量。既然是常量。你消失了。 我在內存中存儲的是數據20,所以,我還是有數據在使用。 */ class Outer { private int num = 10; public void method() { //int num2 = 20; //final int num2 = 20; class Inner { public void show() { System.out.println(num); //從內部類中訪問本地變量num2; 需要被聲明為最終類型 System.out.println(num2);//20 } } //System.out.println(num2); Inner i = new Inner(); i.show(); } } class InnerClassDemo { public static void main(String[] args) { Outer o = new Outer(); o.method(); } } ~~~ ### 匿名內部類(__Android常用) ~~~ /* 匿名內部類 就是內部類的簡化寫法。 前提:存在一個類或者接口 這里的類可以是具體類也可以是抽象類。 格式: new 類名或者接口名(){ 重寫方法; } 本質是什么呢?——對象 是一個 繼承了該類 或者 實現了該接口的子類 匿名對象。(該抽象類的具體類、該類的子類、該接口的實現類) */ interface Inter { public abstract void show(); public abstract void show2(); } class Outer { public void method() { /*整個整體僅僅是個 接口的實現類對象 <span style="white-space:pre"> </span>new Inter() { <span style="white-space:pre"> </span>public void show() { <span style="white-space:pre"> </span>System.out.println("show"); <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>}; <span style="white-space:pre"> </span>*/ //一個方法的時候 /* new Inter() { public void show() { System.out.println("show"); } }.show(); */ //二個方法的時候 /* new Inter() { public void show() { System.out.println("show"); } public void show2() { System.out.println("show2"); } }.show(); new Inter() { public void show() { System.out.println("show"); } public void show2() { System.out.println("show2"); } }.show2(); */ //如果接口中有很多個方法,就非常麻煩了 //改進的方案—— Inter i = new Inter() { //多態 public void show() { System.out.println("show"); } public void show2() { System.out.println("show2"); } }; i.show(); i.show2(); } } class InnerClassDemo { public static void main(String[] args) { Outer o = new Outer(); o.method(); } } ~~~ 再來看一下匿名內部類的具體使用: ~~~ /* 匿名內部類在開發中的使用 */ interface Person { public abstract void study(); } class PersonDemo { //接口名作為形式參數 //其實這里需要的不是接口,而是該接口的實現類的對象 public void method(Person p) { p.study(); } } //實現類——傳統方法 class Student implements Person { public void study() { System.out.println("好好學習,天天向上"); } } class InnerClassTest { public static void main(String[] args) { //測試 PersonDemo pd = new PersonDemo(); Person p = new Student(); pd.method(p); System.out.println("--------------------"); //匿名內部類在開發中的使用 //不需要去專門實現一個 實現類 //匿名內部類的本質是繼承類或者實現了接口的子類匿名對象 pd.method(new Person(){ //相比上面,簡化代碼,另外,匿名類用完就是垃圾,就可以立馬被回收,所以常在Android中出現。 public void study() { System.out.println("好好學習,天天向上"); } }); } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看