1. 程式人生 > >java學習三內部類

java學習三內部類

view 靜態變量 每一個 對象 你在 left align don 使用方法

//外部類HelloWorld
public class HelloWorld {

// 內部類Inner,類Inner在類HelloWorld的內部
public class Inner {

// 內部類的方法
public void show() {
System.out.println("welcome to imooc!");
}
}

public static void main(String[] args) {

// 創建外部類對象
HelloWorld hello = new HelloWorld();
// 創建內部類對象
Inner i = hello.new

Inner();
// 調用內部類對象的方法
i.show();
}

成員內部類需要先創建外部類,才能創建它自己的,這是因為每一個內部類都保存了一個對外部類的一個引用。這很好理解,因為你要實例化這個內部類,肯定是通過外部類的一個實例,而內部類保留的這個引用就是這個外部類實例。可以類比一下方法,你怎麽使用一個類裏面定義的xxx()方法?肯定是先new一個對象hello,然後再hello.xxx() 這樣使用方法。你在定義一個內部類的時候,默認會生成此內部類的構造方法,如何使用此構造方法呢?跟使用普通方法一樣。

1、 Inner 類定義在 Outer 類的內部,相當於 Outer 類的一個成員變量的位置,Inner 類可以使用任意訪問控制符,如 public 、 protected 、 private 等

2、 Inner 類中定義的 test() 方法可以直接訪問 Outer 類中的數據,而不受訪問控制符的影響,如直接訪問 Outer 類中的私有屬性a

3、 定義了成員內部類後,必須使用外部類對象來創建內部類對象,而不能直接去 new 一個內部類對象,即:內部類 對象名 = 外部類對象.new 內部類( );

4、 外部類是不能直接使用內部類的成員和方法滴

5、 如果外部類和內部類具有相同的成員變量或方法,內部類默認訪問自己的成員變量或方法,如果要訪問外部類的成員變量,可以使用 this 關鍵字。如:

技術分享圖片

靜態內部類是 static 修飾的內部類,這種內部類的特點是:

1、 靜態內部類不能直接訪問外部類的非靜態成員,但可以通過 new 外部類().成員

的方式訪問

2、 如果外部類的靜態成員與內部類的成員名稱相同,可通過“類名.靜態成員”訪問外部類的靜態成員;如果外部類的靜態成員與內部類的成員名稱不相同,則可通過“成員名”直接調用外部類的靜態成員

3、 創建靜態內部類的對象時,不需要外部類的對象,可以直接創建 內部類 對象名= new 內部類();

//外部類
public class HelloWorld {

// 外部類中的靜態變量score
private static int score = 84;

// 創建靜態內部類
public static class SInner {
// 內部類中的變量score
int score = 91;

public void show() {
System.out.println("訪問外部類中的score:" + HelloWorld.score );
System.out.println("訪問內部類中的score:" + score);
}
}

// 測試靜態內部類
public static void main(String[] args) {
// 直接創建內部類的對象

SInner si = new SInner();
// 調用show方法
si.show();
}
}

方法內部類就是內部類定義在外部類的方法中,方法內部類只在該方法的內部可見,即只在該方法內可以使用。由於方法內部類不能在外部類的方法以外的地方使用,因此方法內部類不能使用訪問控制符和 static 修飾符。

技術分享圖片

java學習三內部類