當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > java中的內(nèi)部類分析
java中的內(nèi)部類分析
時(shí)間:2015-06-17 來(lái)源:未知
允許一個(gè)類的定義出現(xiàn)在另一個(gè)類中,將處于另一個(gè)類中的“寄生類”稱為“內(nèi)部類”(inner class),也稱為“類屬類”
這樣的一組類在邏輯上是一個(gè)整體,內(nèi)部類和外層封裝它的類之間存在邏輯上的從屬關(guān)系
內(nèi)部類對(duì)其封裝類的內(nèi)部成員有訪問(wèn)權(quán)限
舉例1:
public class Outer1 {
private int size;
/* 定義一個(gè)內(nèi)部類,名為 "Inner" */
public class Inner {
public void doStuff() {
// 內(nèi)部類可以訪問(wèn)外部類的私有屬性
size++;
}
}
public void testTheInner() {
Inner i = new Inner();
i.doStuff();
}
}
實(shí)例化內(nèi)部類的兩種方法:
---法一:
Outer.Inner in=new Outer().new Inner();
---法二:
Outer o=new Outer();
Outer.Inner I=o.new Inner();
如果內(nèi)部類是static的,也可以用下面方法:
Outer.Inner in=new Outer.Inner();
舉例2:內(nèi)部類中的變量訪問(wèn)形式
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("內(nèi)部類變量:" + 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();
}
}
運(yùn)行結(jié)果:
局部變量:14
內(nèi)部類變量:13
外部類變量:12
舉例3:靜態(tài)內(nèi)部類
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();
}
}
可以看到,如果用static 將內(nèi)部?jī)?nèi)靜態(tài)化,那么內(nèi)部類就只能訪問(wèn)外部類的靜態(tài)成員變量,具有局限性
其次,因?yàn)閮?nèi)部類被靜態(tài)化,因此Out.In可以當(dāng)做一個(gè)整體看,可以直接new 出內(nèi)部類的對(duì)象(通過(guò)類名訪問(wèn)static,生不生成外部類對(duì)象都沒(méi)關(guān)系)
實(shí)例4:私有內(nèi)部類
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) {
//此方法無(wú)效
/*
Out.In in = new Out().new In();
in.print();
*/
Out out = new Out();
out.outPrint();
}
}
如果一個(gè)內(nèi)部類只希望被外部類中的方法操作,那么可以使用private聲明內(nèi)部類
上面的代碼中,我們必須在Out類里面生成In類的對(duì)象進(jìn)行操作,而無(wú)法再使用Out.In in = new Out().new In() 生成內(nèi)部類的對(duì)象
也就是說(shuō),此時(shí)的內(nèi)部類只有外部類可控制。
華清遠(yuǎn)見(jiàn)90+項(xiàng)目獲批!教育部2021最新協(xié)同育人項(xiàng)目名
華清遠(yuǎn)見(jiàn)榮獲2021騰訊教育“年度口碑影響力職業(yè)教育品
華清遠(yuǎn)見(jiàn)受邀參加2021年武漢民辦高校信息學(xué)科合作聯(lián)盟
溫暖同行共創(chuàng)佳績(jī) 2019華清遠(yuǎn)見(jiàn)北京總部年會(huì)大曝光
助力高校AI人工智能學(xué)科建設(shè) 華清遠(yuǎn)見(jiàn)人工智能師資班
華清遠(yuǎn)見(jiàn)受邀參加四川省物聯(lián)網(wǎng)年會(huì),榮獲優(yōu)秀企業(yè)專家
