一般來說,有4中內部類:常規內部類、靜態內部類、區域性內部類、匿名內部類。
一.常規內部類:常規內部類沒有用static修飾且定義在在外部類類體中。
1.常規內部類中的方法可以直接使用外部類的例項變數和例項方法。
2.在常規內部類中可以直接用內部類建立物件
3.**如下:
public class myouter
}public void outermethod()
public void makeinner()
/*** @param args
*/public static void main(string args)
}4.執行結果:
內部類中 string =hello!
外部類中的x =100
x is101
二.靜態內部類:與類的其他成員相似,可以用static修飾內部類,這樣的類稱為靜態內部類。靜態內部類與靜態內部方法相似,只能訪問外部類的static成員,不能直接訪問外部類的例項變數,與例項方法,只有通過物件引用才能訪問。
3.由於static內部類不具有任何對外部類例項的引用,因此static內部類中不能使用this關鍵字來訪問外部類中的例項成員,但是可以訪問外部類中的static成員。這與一般類的static方法想通
4.例項**:
package com.m.ou;
public class myouter
}/**
* @param args
*/public static void main(string args)
}4.執行結果:
x=100
y=hello!
三.區域性內部類:在方法體或語句塊(包括方法、構造方法、區域性塊或靜態初始化塊)內部定義的類成為區域性內部類。
區域性內部類不能加任何訪問修飾符,因為它只對區域性塊有效。
1.區域性內部類只在方法體中有效,就想定義的區域性變數一樣,在定義的方法體外不能建立區域性內部類的物件
2.在方法內部定義類時,應注意以下問題:
1.方法定義區域性內部類同方法定義區域性變數一樣,不能使用private、protected、public等訪問修飾說明符修飾,也不能使用static修飾,但可以使用final和 abstract修飾
2.方法中的內部類可以訪問外部類成員。對於方法的引數和區域性變數,必須有final修飾才可以訪問。
3.static方法中定義的內部類可以訪問外部類定義的static成員
3.程式**:
public class jubu
}return new myinner();}}
class main
} 4.執行結果:
outersize:5
finallocalvar this.y=4
四.匿名內部類:定義類的最終目的是建立乙個類的例項,但是如果某個類的例項只是用一次,則可以將類的定義與類的建立,放到與一起完成,或者說在定義類的同時就建立乙個類
以這種方法定義的沒有名字的類成為匿名內部類。
宣告和構造匿名內部類的一般格式如下:
new classorinte***cename()
1.匿名內部類可以繼承乙個類或實現乙個介面,這裡的classorinte***cename是匿名內部類所繼承的類名或實現的介面名。但匿名內部類不能同時實現乙個介面和繼承乙個類,也不能實現多個介面。如果實現了乙個介面,該類是object類的直接子類,匿名類繼承乙個類或實現乙個介面,不需要extends和implements關鍵字。
2.由於匿名內部類沒有名稱,所以類體中不能定義構造方法,由於不知道類名也不能使用關鍵字來建立該類的例項。實際上匿名內部類的定義、構造、和第一次使用都發生在同樣乙個地方。此外,上式是乙個表示式,返回的是乙個物件的引用,所以可以直接使用或將其複製給乙個物件變數。例:
typename obj=new name()
同樣,也可以將構造的物件作為呼叫的引數。例:
somemethod(new name());
3.程式**:
public class niming };}
/*** @param args
*/public static void main(string args)
}4.程式執行結果:
outersize=5
finallocalvar=47
java四種內部類詳解
一般來說,有4中內部類 常規內部類 靜態內部類 區域性內部類 匿名內部類。一.常規內部類 常規內部類沒有用static修飾且定義在在外部類類體中。1.常規內部類中的方法可以直接使用外部類的例項變數和例項方法。2.在常規內部類中可以直接用內部類建立物件 3.如下 public class myoute...
Java四種內部類
參考 四種內部類 常規內部類 靜態內部類 區域性內部類 匿名內部類 1 常規內部類 常規內部類沒有用static修飾且定義在外部類類體中,常規內部類可以理解為類中普通的成員變數 1 常規內部類可以訪問外部類的private成員變數和方法 2 如果要訪問內部類,首先要例項化外部類outer,然後呼叫i...
49 java四種內部類詳解
一般來說,有4中內部類 常規內部類 靜態內部類 區域性內部類 匿名內部類。一.常規內部類 常規內部類沒有用static修飾且定義在在外部類類體中。1.常規內部類中的方法可以直接使用外部類的例項變數和例項方法。2.在常規內部類中可以直接用內部類建立物件 3.如下 public class myoute...