明確:內部類=內置類=嵌套類(由於翻譯的問題造成)
1、定義:
就是將一個類定義在另一個類的裏面,裏面的那個類就稱爲內部類。
2、訪問特點
(1)內部類可以直接訪問外部類中的數據,包括私有成員。
(2)而外部類要訪問內部類中的成員必須建立內部類的對象。
3、編譯生成的文件名
外部類名$內部類名.class
其中名字含有所屬關係
4、爲什麼要使用內部類呢?
可以使訪問變量更加簡單。
eg1:
(1)
```
class outer
{
private int a=3;
}
class inter
{
void show()
{
System.out.println("show run..."+a);
}
}
class outer
{
private int a=3;
class inter
{
void show()
{
System.out.println("show run..."+a);
}
}
}
(1)中的兩個對象,如果inter想要訪問outer中的a,必須通過建立實例化對象進行訪問。而對於(2)中的inter則不需如此繁瑣,可以直接訪問,因爲inter是outer中的一個部分。
eg2:(有點不恰當,純屬娛樂)
孫悟空向鐵扇公主借扇子——飛到肚子裏和在肚子外,肚子外沒借到,但是肚子裏就可以借到了。
5、一般用於對類的設計
分析事物時,發現該事物描述中還有事物,而且這個事物還在訪問被描述事物的內容,這時就可以使用內部類了。
eg:身體
心臟設計在身體內,因爲心臟要訪問身體內部的很多部分,所以直接設計在身體裏面。
6、內部類的修飾符
(1)直接訪問外部類中的內部類的成員——格式:外部類名.內部類名=new 外部類對象.內部類對象();
eg: outer.inter=new outer().new.inter();
(2)當內部類是一個靜態類時,相當於一個外部類,應爲outer加載時,inter就加載了。
eg:outer.inter i=new outer.inter();//此時直接調用即可,不用在new inter
i.show();
(3)當內部類是靜態時,成員也是靜態時,(如果內部類定義了靜態成員,該內部類也必須是靜態的)
eg: outer.inter.show();
7、細節辨析
(1)
class outer
{
int num=3;
class inter
{
int num=4;
void show()
{
int num=5;
System.out.println("num="+num);
}
void show1()
{
new inter().show();
}
}
}
public class innerClassDemo {
public static void main(String[] args)
{
new outer().show1();
}
}
輸出:5
(2)
class outer
{
int num=3;
class inter
{
int num=4;
void show()
{
int num=5;
System.out.println("num=“+this.num);
}
void show1()
{
new inter().show();
}
}
}
public class innerClassDemo {
public static void main(String[] args)
{
new outer().show1();
}
}
輸出:4
(3)
class outer
{
int num=3;
class inter
{
int num=4;
void show()
{
int num=5;
System.out.println("num=“+outer.this.num);
}
void show1()
{
new inter().show();
}
}
}
public class innerClassDemo {
public static void main(String[] args)
{
new outer().show1();
}
}
輸出:3