public interface Contents {
int value();
}
public interface Destination {
String readLabel();
}
public class Goods {
private class Content implements Contents {
private int i =
public int value() {
return i;
}
}
protected class GDestination implements Destination {
private String label;
private GDestination(String whereTo) {
label = whereTo;
}
public String readLabel() {
return label;
}
}
public Destination dest(String s) {
return new GDestination(s);
}
public Contents cont() {
return new Content();
}
}
class TestGoods {
public static void main(String[] args) {
Goods p = new Goods();
Contents c = nt();
Destination d = p
}
}
在這個例子裡類Content和GDestination被定義在了類Goods內部
同時
outerObject=new outerClass(Constructor Parameters);
outerClass
注意在創建非靜態內部類對象時
非靜態內部類對象有著指向其外部類對象的引用
對剛才的例子稍作修改
public class Goods {
private valueRate=
private class Content implements Contents {
private int i =
public int value() {
return i;
}
}
protected class GDestination implements Destination {
private String label;
private GDestination(String whereTo) {
label = whereTo;
}
public String readLabel() {
return label;
}
}
public Destination dest(String s) {
return new GDestination(s);
}
public Contents cont() {
return new Content();
}
}
修改的部分用藍色顯示了
有人會問
outerClass
有了它
靜態內部類
和普通的類一樣
除此之外
局部內部類
是的
public class Goods
public Destination dest(String s) {
class GDestination implements Destination {
private String label;
private GDestination(String whereTo) {
label = whereTo;
}
public String readLabel() { return label; }
}
return new GDestination(s);
}
public static void main(String[] args) {
Goods
Destination d = g
}
}
上面就是這樣一個例子
下面有一個更怪的例子
public class Goods
private void internalTracking(boolean b) {
if(b) {
class TrackingSlip {
private String id;
TrackingSlip(String s) {
id = s;
}
String getSlip() { return id; }
}
TrackingSlip ts = new TrackingSlip(
String s = ts
}
}
public void track() { internalTracking(true); }
public static void main(String[] args) {
Goods
g
}
}
你不能在if之外創建這個內部類的對象
匿名內部類
java的匿名內部類的語法規則看上去有些古怪
// 有點js中 return function(){
new interfacename(){
// 接口的名字或者父類的名字
下面接著前面繼續舉例子
public class Goods
public Contents cont(){
return new Contents(){
private int i =
public int value() {
return i;
}
};
}
}
這裡方法cont()使用匿名內部類直接返回了一個實現了接口Contents的類的對象
在java的事件處理的匿名適配器中
frame
public void windowClosing(WindowEvent e){
System
}
});
有一點需要注意的是
如果是在一個方法的匿名內部類
將匿名內部類改造成有名字的局部內部類
在這個匿名內部類中使用初始化代碼塊
為什麼需要內部類?
java內部類有什麼好處?為什麼需要內部類?
首先舉一個簡單的例子
不過你可能要質疑
的確
真正的原因是這樣的
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26601.html