Java 內部類

  • 內部類的重要知識

    1.不能直接在主方法裏調用內部類的方法或者屬性

class Outer{

private int a=1;

class Inner{

public void Info(){

System.out.println(a);

}

}

}

class ListSetMap {

public static void main(String[] args) {

new Outer.Inner().Info();  //這樣編譯不通過的

}

}

會報錯

---------- 編譯javac ----------

ListSetMap.java:12: 錯誤: 需要包含Outer.Inner的封閉實例 new Outer.Inner().Info(); //這樣是錯誤的寫法 ^ 1 個錯誤

 不是靜態類,因此不能使用“外部類.內部類”的形式。

所以只能通過調用外部類的來調用內部類的方法

class Outer{

private int a=1;

class Inner{

private int b=0; //定義b

public void Info(){

System.out.println(a);

}

}

public void fun()

new Inner().Info(); //生成Inner對象調用方法

System.out.println(new Inner().b); //繼續訪問private int b

}

}

class ListSetMap {

public static void main(String[] args) {

new Outer().fun(); //調用外部類的方法調用內部類

}

}
  • 使用static來聲明內部類(即可直接調用)-->解決上面的辦法
class Outer{

private static int a=1;

static class Inner{

public void Info(){

System.out.println(a);

}

}

}

class ListSetMap {

public static void main(String[] args) {

new Outer.Inner().Info();

}

}

輸出    1

  • 在外部訪問內部類

對於上面的static方法來訪問內部類,那還有下面這種方法來調用內部類的方法或者屬性

class Outer{

private int a=1; //封裝變量   

class Inner{    

public void Info(){

System.out.println(a);

}

}

}

class ListSetMap {

public static void main(String[] args) {

Outer out=new Outer(); //實例化外部類對象

Outer.Inner in=out.new Inner(); //實例化內部類對象

in.Info(); //調用內部類的方法

}

}

輸出   1

  • 還能在方法中定義內部類
class Outer{

private int a=1;

public void fun(){     //此處若有參數 必須使用final定義

class Inner{

public void Info(){

System.out.println(a);

}

}

new Inner().Info();     //實例化內部對象

}

}

class ListSetMap {

public static void main(String[] args) {

new Outer().fun();

}

}

輸出   1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章