Cyh的博客

          Email:kissyan4916@163.com
          posts - 26, comments - 19, trackbacks - 0, articles - 220
              這幾天通過看書,瀏覽別人博客的方式學習了一下內部類,以前也學過,但是用的比較少所以總是忘記。。
          今天把自己現在所了解到的一點點關于內部類的知識記錄下來,日后又忘記的時候就看看
              廢話少說,首先內部類分為 成員內部類,局部內部類,靜態內部類,匿名累不累(累!)
             
              先來看看成員內部類吧:
             
          public class RyanTestInner {

              
          public int a = 10;
              
              
          private String me = "I Love 碧昂斯, very Love";
              String name 
          = "碧昂斯";
              
          public static void outF1(){
                  
              }  
              
          class InnerClass01 {
                  
          // static int mygod = 5; 成員內部類中不能聲明靜態成員變量和方法
                 
          int a= 100;
                 
          public void Innerf1() {
                       System.out.println(a); 
          //訪問內部類自己的成員變量
                       System.out.println(RyanTestInner.this.a);//訪問外部類的成員變量
                       System.out.println(name); //訪問外部類的屬性
                       System.out.println(me); //訪問外部類私有屬性
                  }
              }
              
              
          public InnerClass01 returnInnerClass01() {
                  
                  
          return new InnerClass01();
              }
             
            
              
          public static void main(String[] args) {
                   RyanTestInner rti 
          = new RyanTestInner();
                   rti.returnInnerClass01().Innerf1();
              }
          }

          在來看看局部內部類,也就是生命在方法中的內部類:
          package com.yan.test;

          public class RyanTestInner {

              public void outF2() {
                  
          int a = 100;
                  
          final String b = "kiss beauty"
                  
          class InnerClass1 {
                    
                  
          int a = 1000;    
                  
                  
          public void InnerF1(){
                   System.out.println(b); 
          //如果在局部內部類中使用外部類的局部變量,該變量必須是final類型
                  }    
                }
                    
          new InnerClass1().InnerF1();
              }
           
              
          public static void main(String[] args) {
                   RyanTestInner rti 
          = new RyanTestInner();
                  rti.outF2();

              }
          }
          接下來靜態內部類
          public class TestStaticInner {
                
              
          static int a = 10 ;
             
                
          int b = 100;
                
                
          static void outF1() {

                    System.out.println(
          "outF1() ");
                
                }
                
          /*
                 * 靜態內部類中可以定義非靜態的成員變量和方法,但是只能訪問外部類
                 * 中的靜態方法和靜態變量
                 
          */
               
          static class InnerClass  {
                    
                   
          int a = 11;
                   
                   
          static int c = 20;
                   
                   
          public void  innerF2() {
                       System.out.println(
          "innerF2()");
                   }
                   
                   
          public static void innerF1() {
                       outF1();
                       System.out.println(TestStaticInner.a);
                       System.out.println(c);
                   }
                   
              }  
               
              
          public static void main(String[] args) {    
                  TestStaticInner tsi 
          = new TestStaticInner();
                    TestStaticInner.InnerClass.innerF1();
                 
          //如果想要訪問靜態內部類中的非靜態方法,需要首先 new 外部類.內部類.方法 
                    new  TestStaticInner.InnerClass().innerF2();
              }
          }
          最后匿名內部類,我認為匿名內部類最大的好處就是實現了多繼承,連八戒都說java只能單繼承,但是通過匿名內部類就可以辦到。
          首先我列舉出兩個簡單的不能在簡單的類,大家一看就了改
          首先抽象類
          package com.yan.test;

          public abstract class ChineseBeauty {
                
          public  abstract void sex();
          }
          接口
          package com.yan.test;

          public interface JapansBeauty {
            
              
          public void sex();
              
          }
          現在有個類既繼承了ChineseBeauty又實現了JapansBeauty 那我們到底是改重寫的是哪個方法呢??(方法相同)
          package com.yan.test;

          public class AnonymousInnerTest extends ChineseBeauty {

              @Override
              
          public void sex() {
                  System.out.println(
          "commonF()  From Demo01");
                  
              }
            
              
          public void fuckBeauty() {
                    
                  JapansBeauty  d 
          = new JapansBeauty(){

                      
          public void sex() {
                          System.out.println(
          "we are so beauty ,so sexy~~~");
                      }
                       
                       
                   };
                   d.sex();
              }
              
            
          public static void main(String[] args) {
                AnonymousInnerTest  ai 
          = new AnonymousInnerTest();
               
                ai.sex();
              
                ai.fuckBeauty();
                
          }    
              
          }
          看到這里大家應該有點點明白了吧。。很簡單不難。



                                                                                                                 --    學海無涯
                  

          主站蜘蛛池模板: 涞源县| 新巴尔虎右旗| 福清市| 宁强县| 宜章县| 浠水县| 木兰县| 米林县| 内黄县| 乌兰察布市| 棋牌| 绥化市| 中超| 霍山县| 乌兰县| 江陵县| 百色市| 河西区| 柳河县| 邵东县| 黔江区| 江安县| 河源市| 类乌齐县| 天等县| 固始县| 伊川县| 昌邑市| 武夷山市| 武平县| 大宁县| 长武县| 蓬莱市| 绥芬河市| 衢州市| 平武县| 静乐县| 齐河县| 中江县| 酉阳| 吉安县|