Java內部類,Java

來源:互聯網
上載者:User

Java內部類,Java

   在這小編帶給大家講解一下內部類的基本知識點,在學習Android開發之前我們要對內部類要有所認識,因為在Android的實際開發中內部類的定義我們非常常見,所有小編在這要特意講解,認識一下內部類的文法定義規則

     學習目標:

               掌握內部類定義

               掌握內部類的優缺點

               掌握內部類的使用格式

               掌握static 聲明內部類的作用

   內部類    定義

           在一個類B的內部定義一個類為A,那我們通常叫A類為B類中的內部類,內部類可以聲明成public或者private。當內部類聲明成public或著private時,對其訪問的限制與成員變數和成員方法完全相同,往往定義內部類的作用實作類別之間的高內聚,代碼不對外開放的,實現一些敏感性資料不那麼輕易被訪問的作用

    文法
 標識符 class 外部類的名稱{       //外部類成員     標識符 class 內部類的名稱{          //內部類成員     } }
    形式

      在內部類的學習中我們最常見的內部類有如下三種形式

              成員內部類 、方法內部類、匿名內部類

     特點:      

     成員內部類:在一個外部類的內部且方法外定義的類我們稱為外部類 ,該類特點是高度內聚,不對外開放

     方法內部類(局部內部類):在一個方法內部定義的類我們通常叫做方法內部類或者局部內部類 該類特點是短暫性的,不對外的

     匿名內部類:要滿足匿名內部類操作在實現該類操作時必須是一個抽象類別或者是一個介面,這樣才能使用內部類操作,在實現一個內部類操作時,同時是重寫未實現的方法,也是高內聚的特點

      2. 掌握內部類的優缺點

      在講解內部類的優缺點時,實現我們編寫兩個程式簡單的對比內部類的優缺點

package anonymousinner;public class OutClass  { //定義一個外部類字串屬性private String info ="內部類";//定義一個內部類class Inner{//編寫一個內部類方法public void printInfo(){System.out.println(info);}}//定義一個外部類方法public void print(){//執行調用內部類方法操作new Inner().printInfo() ;}public static void main(String[] args) {new OutClass().print() ;}}

    2.   案例2

package anonymousinner.test;class Out{         //定義一個字串屬性        private String info ="內部類";                //將Inner方法內容輸出        public void print(){            new Inner(this).printInfo() ;        }                public String getInfo(){            return this.info ;        }}class Inner{        private Out out ;        public Inner(Out out){        this.out = out ;    }        //編寫一個內部類方法    public void printInfo(){            System.out.println(out.getInfo());    }    }public class OutClassTwo {        public static void main(String[] args) {         //測試輸出          new Out().print() ;    }}

      結合以上兩個案例代碼可以看出使用內部類的代碼量往往要比不使用內部類案例代碼量要多,而複雜度也增加了,使用內部類最大的優點可以方便訪問外部類中的私人屬性,而使用內部類最大缺點就是在一個正常類操作中,類中只定義了屬性或方法。如果再定義一個內部類的話,則破壞了代碼的整體結構

             剛才上述案例中也是講解了內部類的一種形式叫做成員內部類

    接下來講解的是方法內部類

package anonymousinner;public class FunClass {    private    String info ="外部類屬性值" ;        public static void main(String[] args) {        //執行測試        new FunClass().print() ;    }        public void print(){                class Inner{            //定義一個帶有參數內部類方法            public void printInfo(String str){                System.out.println("這是誰的值:"+str);                System.out.println("這是誰的值:"+info);            }        } ;                new Inner().printInfo("內部類參數值") ;    }}
     使用static聲明內部類

     在使用是static聲明一個內部類,聲明的內部類就稱為外部類了,直接可以在類的外部進行外部調用,如果要訪問外部類的屬性則必須是static存取權限,否則不可直接調用外部類的屬性

package anonymousinner.test;class A{    private static String name ="XiaoMing";        static class B{                public void said(){            System.out.println(name+"可以說話了");        }    }    }public class StaticInnerClass {        public static void main(String[] args) {        //執行調用        new A.B().said() ;    }}

       一旦內部類用static修飾這該內部類可以被外部進行調用,那調用的形式又是怎麼呀的呢?我們可以通過以下格式進行調用

外部類.內部類 內部對象 = 外部類執行個體.new 內部類() 
         匿名內部類

     在實際開發中如果一個類在這個程式中只是使用一次的話,就可以將該類定義為匿名內部類,匿名內部類是在抽象類別以及介面的繼承上發展而來,往往在實現多態操作中發揮的重要作用,且在Android的學習中匿名內部類是非常常見的程式編程形式,還有眾多的java架構中也運用的比較多,我們主要學習掌握匿名內部類的文法定義和使用

package anonymousinner;//定義一個介面interface IUSB{    public void start() ;}//定義一個類實現該介面class Conputer implements IUSB{    public void start() {        System.out.println("電腦中的USB啟動了");    }}public class Test {    public static void main(String[] args) {        //直接以介面形式實現        new Test().print(new Conputer());        //通過匿名實現        new Test().print2() ;    }    //第一種直接通過調用    public void print(IUSB usb){        usb.start() ;    }        public void print2(){        //編寫一個匿名內部類        IUSB comput2 = new IUSB(){            public void start() {                System.out.println("電腦2USB啟動");            }         } ;        comput2.start() ;            }}

    在使用匿名內部時,如果電腦這個類只需要使用一次,那我們還要而外聲明一個類嗎?答案是不用的,所以匿名內部類的好處就體現在這了

    以上就是匿名內部類的講解內容啦!如果對小編寫的內容有疑問或者寫的不對的地方那懇請各位給小編留言啦,謝謝

 

 

 

 

 

 

 

 

    

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.