內部類(非靜態 區域性 靜態 匿名)

2021-09-27 03:05:18 字數 2905 閱讀 7579

目錄

內部類(非靜態、區域性、靜態、匿名):

一、非靜態內部類

1.建立非靜態內部類

2.在外部類中訪問內部類

3.在外部類外訪問內部類

4.在內部類中訪問外部類​

5.補充

二、區域性內部類

1.區域性內部類的建立

2.在區域性內部類中訪問外部類成員變數

3.在區域性內部類中訪問外部類的區域性變數

4.靜態方法中的區域性內部類

三、靜態內部類

1.建立靜態內部類

2.例項化 及 成員呼叫

四、匿名內部類

1.建立匿名內部類

2.匿名內部類的初始化

1.把乙個類放在另乙個類的內部定義,稱為內部類(innerclasses)。

2.內部類可以使用public、default、protected 、private以及static修飾。而外部頂級類(我們以前接觸的類)只能使用public和default修飾。 

內部類的作用:

1. 內部類提供了更好的封裝。只能讓外部類直接訪問,不允許同乙個包中的其他類直接訪問。

2. 介面只是解決了多重繼承的部分問題,而內部類使得多重繼承的解決方案變得更加完整。

非靜態內部類可以直接訪問外部類的成員,但是外部類不能直接訪問非靜態內部類成員。

非靜態內部類不能有靜態方法、靜態屬性和靜態初始化塊。

外部類的靜態方法、靜態**塊不能訪問非靜態內部類。

class wai//外部類成員}

先建立內部類物件,在通過內部類物件訪問內部類成員

範例:

public class innerclass 

}class wai

public void myvoid()

}

基本語法:wai.nei wn = new wai().new nei();

也可以分成兩條:wai w = new wai();      wai.nei wn = w.new nei();

public class innerclass 

}class wai

}

注意:如果 內部類 [成員] 被private修飾,則外部類外訪問內部類時不能訪問內部類可以訪問外部類所有成員,不需要新增內容,就像成員方法間呼叫一樣

public class innerclass 

}class wai

}}

public class innerclass 

}class wai

}}

區域性內部類的作用範圍和區域性變數是相同的,只在區域性起作用

public class innerclass 

}class wai

nei n = new nei();

system.out.println(n.i);

}}

直接呼叫即可

外部類中的區域性變數必須要加final,否則會報錯

原因:非final區域性變數的生命週期比區域性內部類短

public class innerclass 

}class wai

} nei n = new nei();

n.myneivoid();

}}

區域性內部類可以訪問外部類的所有成員,包括私有成員。但在靜態方法中定義的區域性內部類,只能訪問外部的靜態成員示例:(會報錯)

public class innerclass 

}class wai

} nei n = new nei();

n.myneivoid();

}}

class  wai

//外部類成員

1. 當乙個靜態內部類物件存在,並不一定存在對應的外部類物件。 因此,靜態內部類的例項方法不能直接訪問外部類的例項方法。

2. 靜態內部類看做外部類的乙個靜態成員。 因此,外部類的方法中可以通過:「靜態內部類.名字」的方式訪問靜態內部類的靜態成員,通過 new 靜態內部類()訪問靜態內部類的例項。

class outer

}public class innerclass

}

匿名內部類的宣告必須是基於繼承或者是基於介面的,建立格式如下:

new neifather()

};n.myvoid(); //呼叫匿名內部類中的方法 }}

//建立匿名內部類將實現的介面

匿名內部類沒有名稱,所以沒有構造器,這時初始化工作便成了問題

方法:建立乙個非靜態語句塊,將所有初始化的成員變數放在該語句塊中,這樣在匿名內部類中就可以呼叫這些成員變數了。

public class neiclass 

//重寫父類中的方法

public void myvoid()

};n.myvoid(); }}

//建立匿名內部類將繼承的父類

內部類(靜態 成員 區域性 匿名)

靜態內部類 可以用訪問控制許可權的修飾符修飾 可以等同看做靜態變數 可以訪問外部類中私有的資料 作用 靜態內部類可以直接訪問外部類的靜態資料,無法直接訪問成員 public class demo18 private void m2 static class innerclass public voi...

靜態內部類,區域性內部類和匿名內部類

區域性內部類和其他類一同被編譯,但是區域性內部類有自己的作用域,超出那個範圍即無效 第一種情況 在函式內 public class innerclass return new aa public class test public inte ce a 第二種情況 在 塊內 public class ...

Java 的匿名內部類 非靜態內部類 靜態內部類

首先先說一下非靜態內部類與靜態內部類 這兩者斗是依附於乙個外部類的,然後在該外部類裡面實現自身的定義,在實現上的區別就是static修飾與否的區別 public class innerclasstest public void somemethod 非靜態內部類 class nonstaticcla...