Java 內部類

來源:互聯網
上載者:User

標籤:his   log   lin   system   ...   實現   參數   turn   那是   

/*為什麼內部類能直接存取外部類中成員呢?那是因為內部類持有了外部類的引用。  外部類名.this*/
class Outer{    int num = 3;    class Inner    {        int num = 4;        void show()        {            int num = 5;            System.out.println(Outer.this.num);        }    }    void method()    {        new Inner().show();    }}class InnerClassDemo2 {    public static void main(String[] args)     {        new Outer().method();    }}
局部內部類/*局部內部類可以存放在局部位置上。 內部類在局部位置上只能訪問局部中被final修飾的局部變數。*/
class Outer{    int num = 3;    Object method()    {        final int x = 9;        class Inner        {            public String toString()            {                return "show ..."+x;            }        }        Object in = new Inner();        return in;//0x0045//        in.show();    }    }class InnerClassDemo3 {    public static void main(String[] args)     {        Outer out = new Outer();        Object obj = out.method();        System.out.println(obj);    }}
* 匿名內部類。就是內部類的簡寫格式。 必須有前提:內部類必須繼承或者實現一個外部類或者介面。 匿名內部類: 其實就是一個匿名子類對象。  格式:new 父類or介面(){子類內容} */
abstract class Demo{    abstract void show();}class Outer{    int num = 4;    /* 注釋    class Inner extends Demo    {        void show()        {            System.out.println("show ..."+num);        }    }    */    public void method()    {        //new Inner().show();        new Demo()//匿名內部類。        {            void show()            {                System.out.println("show ........"+num);            }        }.show();    }}class InnerClassDemo4 {    public static void main(String[] args)     {        new Outer().method();    }}////////////////////////////////////////////////////////////////////////interface Inter{    void show1();    void show2();}class Outer{    /*    class Inner implements Inter    {        public void show1()        {        }        public void show2()        {                }    }    */    public void method()    {//        Inner in = new Inner();//        in.show1();//        in.show2();                Inter in = new Inter()        {            public void show1()            {                            }            public void show2()            {                        }                    };        in.show1();        in.show2();    }}
/*通常的使用情境之一:當函數參數是介面類型時,而且介面中的方法不超過三個。可以用匿名內部類作為實際參數進行傳遞*/
class InnerClassDemo5 {    class Inner    {    }    public static void main(String[] args)     {        System.out.println("Hello World!");        /*        show(new Inter()        {            public void show1(){}            public void show2(){}        });        *///        new Inner();    }    public void method()    {        new Inner();    }    public static void show(Inter in)    {        in.show1();        in.show2();    }}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////class Outer{    void method()    {        Object obj = new Object()        {            public void show()            {                System.out.println("show run");            }        };        //obj.show();   //error : 因為匿名內部類這個子類對象被向上轉型為了Object類型。           //這樣就不能在使用子類特有的方法了。                new Object()        {            public void show()            {                System.out.println("show run");            }        }.show();    }}public class FieldDemo {    public static void main(String[] args)    {          new Outer().method();        }    }  

 

Java 內部類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.