內部類、內置類、嵌套類


明確:內部類=內置類=嵌套類(由於翻譯的問題造成)


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

解釋: 爲什麼內部類能直接訪問外部內的成員呢? 因爲內部類持有了外部類的引用——外部類名.this 由此可知內部類和外部類也是依賴於對象進行引用。

發佈了19 篇原創文章 · 獲贊 36 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章