更新時間:2023-02-10 16:51:19 來源:動力節點 瀏覽2184次
在Java 內部類的學習中,你會發現關于靜態內部類和非靜態內部類方法和屬性調用的規則有好多,為了加深理解記憶,在這里總結一下,如有錯誤歡迎指正。
內部類實質上可以理解為外部類的一個成員,作為一個類,它可以有訪問修飾符修飾,因為內部類的上一級程序單元是外部類,所以它具有4個作用域:同一個類,同一個包,父子類和任意位置,因此可以使用private、protected、public、default修飾符修飾。作為一個成員,它可以用static修飾,所以分為普通內部類和靜態內部類。
一、非靜態內部類 :
非靜態內部類因為是非靜態成員所以是依賴對象而存在的,所以要想創建非靜態內部類的對象,必須先要有外部類對象才行,但是如果已經有了外部類的對象,卻不代表一定有非靜態內部類對象的產生。所以可以想到:
1、當創建非靜態內部類對象的時候就相當于外部類的不管是實例變量,還是類變量都可以直接使用了,然后根據內部類本身就屬于外部類本身,所以不管公有屬性還是私有屬性都可以使用。
2、由于在非靜態內部類一般是沒有靜態成員的(因為有一個特殊的例子就是編譯器常量,也就是在編譯期就能確定值的常量,在上篇博文中有詳細介紹),所以上面說到的調用都是在非靜態內部類的普通方法里調用的。
3、根據靜態成員不能引用非靜態成員的規則,外部類的靜態成員也不能訪問非靜態內部類。包括不能使用非靜態內部類定義變量、創建實例等。所以只能在外部類的非靜態方法里面創建的實例,在靜態方法里面創建實例就會報錯。
public class Out {
public String str1="公有普通變量";
private String str2="私有普通變量";
public static String str3="公有靜態變量";
private static String str4="私有靜態變量";
public void test1() {
System.out.println("外部類的普通公有方法!");
}
private void test2() {
System.out.println("外部類的普通私有方法");
}
public static void test3() {
System.out.println("外部類的靜態公有方法!");
}
private static void test4() {
System.out.println("外部類的靜態私有方法");
}
public static void main(String[] args) {
// TODO 自動生成的方法存根
new Out().getInner();
}
class Inner{
public final static int a=3; //編譯期常量,不會報錯
public void test() {
test1(); //外部類的普通公有方法!
test2(); //外部類的普通私有方法!
test3(); //外部類的靜態公有方法!
test4(); //外部類的靜態私有方法!
//下面這行代碼分別輸出str1、str2、str3、str4
System.out.println(str1+"\t"+str2+"\t"+str3+"\t"+str4);
}
}
public void getInner() {
Inner inner=new Inner();
inner.test();
}
public static void getInner2() {
//下面這行代碼會報錯,因為不能在靜態成員里面引用非靜態內部類
//Inner inner=new Inner();
}
}
以上就是動力節點小編介紹的"讓我們來加深非靜態內部類的知識點",希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為您務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習