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在這裡並沒有特別寄義,只是一種表現情勢罷了