劉欣
Java中的內部類在程序中起著“心臟”的作用,能用此實現特定的功能,具有非常好的封裝性。使用內部類可以很方便地編寫事件驅動程序。本文將結合簡單實例內部類理解及用法進行詳細描述。
一、內部類的定義及分類
內部類指的是Java類體內定義的類,也稱為嵌套類。通常類體內有屬性與方法兩大部分,有了內部類,類體內可包括屬性、方法及類三個部分。內部類可分為成員內部類、靜態內部類與方法內部類,以及一種特殊的匿名內部類。下面分別闡述。
二、成員內部類
成員內部類指的是與外部類的屬性、方法并列定義且作為外部類的一個成員存在的類。比如:
class outter{
void f(? ?){ //inner bb=new inner(); bb.g();
System.out.print(“我是外部類的方法”);}
class inner{ void g(? ?){
System.out.print(“我是內部類的方法”);}}
public static void main(String args[]){
outter.inner aa=new outter(? ).new inner(? ?);
aa.g(? ?);}}
例中inner是成員內部類。若想通過外部類去訪問內部類,則需通過外部類對象創建內部類對象,語法如下:
外部類名:內部類名變量名=new外部類名(? )·new內部類名(? );然后用對象訪問內類部里的方法。代碼如下:
outter.inner aa=new outter().new inner();
aa.g(? ?);
另外,可在內部類里訪問外部類成員方法。
三、靜態內部類
靜態內部類是內部類的前面加上了修飾詞static,舉例如下:
public class outter {
void f(? ) {
System.out.println("我是外部類的方法");
new inner(? ?).g(? ?); }
static class inner{? void g(? ) {
System.out.println("我是內部類的方法");}}
public static void main(String[] args) {
outter.inner aa=new outter.inner(? ?);
aa.g(? ?); }}
其中inner就是靜態內部。如果想通過外部類去訪問內部類,只需要直接創建外部類的對象去訪問內部方法,創建對象的具體語法格式如下:
外部類名.內部類名 對象名=new 外部類名.內部類名();
然后用外部類對象去訪問內部類里的方法。對應上例中的代碼為:
outter.inner aa=new outter.inner();
四、匿名內部類
匿名內部類顧名思義,就是沒有名字的內部類,而且是方法內部類。在GUI編程中用得較多,用于實現每個組件注冊了監聽事件后,來完成事件的響應動作。格式為:
方法名(new 接口名(? ?){});
舉例如下:
interface shout{ void fg(); }
public class outter {
public static void main(String[] args) {
fh(new shout(? ?) { public void fg(? ? ) {
System.out.println("匿名內部類實現"); }});}
public static void fh(shout ab) {ab.fg(? ?); }}
五、方法內部類
方法內部類又叫局部內部類,該類位于方法體內,使用范圍比方法小,比較少用。特別要注意的是方法體內不能定義靜態方法內部類。
六、結語
除了可方便定義外,內部類還具有如下特點:
1.不為同一包的其他類所見,具有很好的封裝性。
2.使用內部類可用于編寫事件驅動程序。
3.匿名內部類可以方便的定義運行時回調。
(責任編輯? 李 芳)