內(nèi)部類: 在一個(gè)類的內(nèi)部定義另外一個(gè)類慕购,那么另外一個(gè)類則稱作為內(nèi)部類 。
內(nèi)部類的class文件名: 外部類$內(nèi)部類.class
成員內(nèi)部類:
成員內(nèi)部類的訪問方式:
方式一: 在外部類提供一個(gè)方法創(chuàng)建內(nèi)部類的對(duì)象進(jìn)行訪問休傍。
方式二:在其他類中直接創(chuàng)建內(nèi)部的對(duì)象進(jìn)行訪問。
格式:
外部類.內(nèi)部類 變量名 = new 外部類().new 內(nèi)部類();
注意:靜態(tài)成員內(nèi)部類在其他類創(chuàng)建對(duì)象的格式:
外部類.內(nèi)部類 變量名 = new 外部類.內(nèi)部類();
內(nèi)部類的好處: 直接訪問外部類的所有成員蹲姐。
應(yīng)用場(chǎng)景: 我們?cè)诿枋鯝事物的時(shí)候磨取,A事物內(nèi)部還維護(hù)了另外一個(gè)B事物人柿,
而且B事物還必須 要訪問到A事物的成員,那么這時(shí)候我們就可以使用內(nèi)部類描述B事物忙厌。
圖形化界面編程
成員內(nèi)部類要注意的細(xì)節(jié):
1. 內(nèi)部類可以直接訪問外部類的所有成員凫岖。
2. 內(nèi)部類與外部類存在同名的成員時(shí), 在內(nèi)部類中默認(rèn)是訪問內(nèi)部類的成員逢净, 可以通過"外部類.this.成員"進(jìn)行指定訪問外部類的成員哥放。
3. 私有的成員內(nèi)部類只能通過在外部類提供一個(gè)公共的方法進(jìn)行訪問。 在其他類無法訪問爹土。
4. 如果一個(gè)成員內(nèi)部類定義了靜態(tài)的成員甥雕,那么該類也必須使用static修飾。
疑問:為什么如果一個(gè)成員內(nèi)部類定義了靜態(tài)的成員胀茵,那么該類也必須使用static修飾 ???
靜態(tài)的成員變量是不依賴對(duì)象而存在的
//外部類 new Outer().Inner.x
class Outer{
String name = "外部類";
//成員內(nèi)部類
static class Inner{
static int x = 10;
String name = "內(nèi)部類";
public void print(){
System.out.println("這個(gè)是內(nèi)部類的print方法:"+name); //默認(rèn)訪問時(shí)內(nèi)部類社露,
}
}
//外部類
public void newInstance(){
Inner inner = new Inner();
inner.print();
}
}
//其他類
class Demo
{
public static void main(String[] args)
{
Outer outer = new Outer();
outer.newInstance();
System.out.println("x:"+Outer.Inner.x);
//創(chuàng)建內(nèi)部類對(duì)象
Outer.Inner inner = new Outer.Inner();
inner.print();
}
}