JAVA學習筆記(四十六)- 內部類詳解

來源:互聯網
上載者:User

標籤:成員內部類   匿名內部類   靜態內部類   局部內部類   

成員內部類
/* * 內部類 * 定義在另一個類中的類,稱為內部類Inner Class * 包含內部類的類,稱為外部類Outer Class *  * 應用場合:在表單程式中進行事件處理 *  * 分類: * 成員內部類 * 局部內部類 * 靜態內部類 * 匿名內部類 *  * 成員內部類 * 1.在外部類中訪問內部類,可以訪問內部類中的所有成員,包含private修飾的 * 2.在外部類外訪問內部類,不能訪問內部類中的private修飾的成員 * 3.在內部類中訪問外部類,直接存取,如果內部類和外部類的變數名相同,可使用“外部類.this.變數” */public class Test12 {    public static void main(String[] args) {        Outer out=new Outer();//建立外部類的對象        /*out.print();//調用外部類的方法*/          //2.在外部類外訪問內部類        //在外部類的外部建立內部類的對象,文法:外部類.內部類  對象名=外部類對象.new 內部類();        //Outer.Inner in=out.new Inner(); //必須先建立外部類的對象        Inner in=out.new Inner();        //System.out.println(in.age);//無法訪問內部類的private成員        in.show();    }}/* * 外部類Outer,內部類Inner * 編譯後,會產生三個位元組碼檔案:Test12.class、Outer.class、Outer$Inner.class * 成員內部類名稱:外部類名$內部類名.class */class Outer{ //外部類    private String name="tom";//外部類的成員變數    static String address="南京";    class Inner{ //內部類        private int age=20;//內部類中的成員變數        private String name="張三";        String address="北京";        public void show(){            String address="天津";            System.out.println("內部類中的show方法");            //3.在內部類中訪問外部類            System.out.println("內部類中的name:"+this.name);            System.out.println("外部類中的name:"+Outer.this.name);            System.out.println("內部類中的age:"+age);            System.out.println("內部類中的address:"+this.address);            System.out.println("外部類中的address:"+Outer.address);            System.out.println("內部類中的局部變數address:"+address);        }    }    //1.在外部類中訪問內部類    public void print(){        System.out.println("外部類中的print方法");        Inner in=new Inner();//直接建立內部類的對象        System.out.println(in.age);//訪問內部類的屬性,可以訪問private成員        in.show();    }}
局部內部類
/* * 局部內部類 * 也稱為方法內部類,即定義在外部類的方法中的類 * 1.存取範圍:只能在外部類的方法中使用,不能使用修飾符進行修飾 * 2.在局部內部類中不能訪問外部類的方法中非final修飾的成員 */public class Test01 {    public static void main(String[] args) {        MOuter out=new MOuter();        out.show();    }}class MOuter{    String name="tom";    public void show(){        final int age=20;        System.out.println("外部類中的show方法");        class MInner{ //局部內部類            String sex="male";            private String address="南京";            public void print(){                System.out.println("局部內部類中的print方法");                System.out.println("外部類中的成員變數name:"+name);                System.out.println("外部類中局部變數age:"+age);            }        }        //只能在外部類的方法中使用        MInner in=new MInner();        System.out.println(in.sex);        System.out.println(in.address);        in.print();    }}
靜態內部類
/* * 靜態內部類 * 使用static修飾的成員內部類 * 不能訪問外部類中非static成員 */public class Test02 {    public static void main(String[] args) {        //建立靜態內部類,無需建立外部類的對象        SInner in=new SInner();        in.show();    }}class SOuter{    static String name="tom";    static class SInner{  //靜態內部類        String sex="male";        public void show(){            System.out.println("靜態內部類中的show方法");            System.out.println("外部類中的name:"+name);        }    }}
匿名內部類
/* * 匿名內部類 * 即沒有名字的內部類,因為此類只需要使用一次,所以沒有起名字的必要 * 1.在建立匿名內部類時,必須作為new語句的一部分來聲明,用法: *   介面|抽象類別  對象名 =  new 介面|抽象類別{ *      //匿名內部類 *   } * 2.在建立匿名內部類時,會自動建立一個匿名內部類的對象,並賦給變數 */public class Test03 {    public static void main(String[] args) {        Service s=new Service(){//匿名內部類            //實現介面中的抽象方法            public void show(){                System.out.println("實現Service介面的匿名內部類");            }        };        s.show();        Animal pig=new Animal() {            @Override            public void play() {                System.out.println("小豬快跑。。。。");            }            @Override            public void show() {                System.out.println("小豬快吃。。。。。");            }        };        pig.show();        pig.play();        Student stu=new Student(){            public void show(){                System.out.println("俺是小學生,嘻嘻嘻嘻");            }        };        stu.show();    }}/* * 定義介面 */interface Service{    //抽象方法    void show();}/*抽象類別*/abstract class Animal{    String name;    public void show(){        System.out.println("動物在吃。。。。");    }    public abstract void play();}class Student{    public void show(){        System.out.println("嘿嘿嘿嘿嘿嘿");    }}

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.