程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java中的外部類具體總結

java中的外部類具體總結

編輯:關於JAVA

java中的外部類具體總結。本站提示廣大學習愛好者:(java中的外部類具體總結)文章只能為提供參考,不一定能成為您想要的結果。以下是java中的外部類具體總結正文


外部類不是很好懂得,但說白了其實也就是一個類中還包括著別的一個類

好像一小我是由年夜腦、肢體、器官等身材成果構成,而外部類相當於個中的某個器官之一,例如心髒:它也有本身的屬性和行動(血液、跳動)

明顯,此處不克不及片面用屬性或許辦法表現一個心髒,而須要一個類

而心髒又在人體傍邊,正好像是外部類在內部內傍邊

實例1:外部類的根本構造

//內部類
class Out {
    private int age = 12;

    //外部類
    class In {
        public void print() {
            System.out.println(age);
        }
    }
}

public class Demo {
    public static void main(String[] args) {
        Out.In in = new Out().new In();
        in.print();
        //或許采取下種方法拜訪
        /*
        Out out = new Out();
        Out.In in = out.new In();
        in.print();
        */
    }
}

運轉成果:12

從下面的例子不好看出,外部類其實嚴重損壞了優越的代碼構造,但為何還要應用外部類呢?

由於外部類可以隨便應用內部類的成員變量(包含公有)而不消生成內部類的對象,這也是外部類的獨一長處

好像心髒可以直接拜訪身材的血液,而不是經由過程大夫來抽血

法式編譯事後會發生兩個.class文件,分離是Out.class和Out$In.class

個中$代表了下面法式中Out.In中的誰人 .

Out.In in = new Out().new In()可以用來生成外部類的對象,這類辦法存在兩個小常識點須要留意

1.開首的Out是為了標明須要生成的外部類對象在哪一個內部類傍邊

2.必需先有內部類的對象能力生成外部類的對象,由於外部類的感化就是為了拜訪內部類中的成員變量

實例2:外部類中的變量拜訪情勢

class Out {
    private int age = 12;

    class In {
        private int age = 13;
        public void print() {
            int age = 14;
            System.out.println("部分變量:" + age);
            System.out.println("外部類變量:" + this.age);
            System.out.println("內部類變量:" + Out.this.age);
        }
    }
}

public class Demo {
    public static void main(String[] args) {
        Out.In in = new Out().new In();
        in.print();
    }
}

運轉成果:

部分變量:14
外部類變量:13
內部類變量:12

從實例1中可以發明,外部類在沒有同名成員變量和部分變量的情形下,外部類會直接拜訪內部類的成員變量,而無需指定Out.this.屬性名

不然,外部類中的部分變量會籠罩內部類的成員變量

而拜訪外部類自己的成員變量可用this.屬性名,拜訪內部類的成員變量須要應用Out.this.屬性名

實例3:靜態外部類

 class Out {
    private static int age = 12;

    static class In {
        public void print() {
            System.out.println(age);
        }
    }
}

public class Demo {
    public static void main(String[] args) {
        Out.In in = new Out.In();
        in.print();
    }
}

運轉成果:12

可以看到,假如用static 將外部內靜態化,那末外部類就只能拜訪內部類的靜態成員變量,具有局限性

其次,由於外部類被靜態化,是以Out.In可以當作一個全體看,可以直接new 出外部類的對象(經由過程類名拜訪static,生不生成內部類對象都沒緊要)

實例4:公有外部類

 class Out {
    private int age = 12;

    private class In {
        public void print() {
            System.out.println(age);
        }
    }
    public void outPrint() {
        new In().print();
    }
}

public class Demo {
    public static void main(String[] args) {
        //此辦法有效
        /*
        Out.In in = new Out().new In();
        in.print();
        */
        Out out = new Out();
        out.outPrint();
    }
}

運轉成果:12

假如一個外部類只願望被內部類中的辦法操作,那末可使用private聲明外部類

下面的代碼中,我們必需在Out類外面生成In類的對象停止操作,而沒法再應用Out.In in = new Out().new In() 生成外部類的對象

也就是說,此時的外部類只要內部類可掌握

好像是,我的心髒只能由我的身材掌握,其別人沒法直接拜訪它

實例5:辦法外部類

 class Out {
    private int age = 12;

    public void Print(final int x) {
        class In {
            public void inPrint() {
                System.out.println(x);
                System.out.println(age);
            }
        }
        new In().inPrint();
    }
}

public class Demo {
    public static void main(String[] args) {
        Out out = new Out();
        out.Print(3);
    }
}

運轉成果:
3
12

在下面的代碼中,我們將外部類移到了內部類的辦法中,然後在內部類的辦法中再生成一個外部類對象去挪用外部類辦法

假如此時我們須要往內部類的辦法中傳入參數,那末內部類的辦法形參必需應用final界說

至於final在這裡並沒有特別寄義,只是一種表現情勢罷了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved