導語
學完匿名內部類就懂的情書。
// 情書
// 在我的世界你永遠18歲
me.world(new You() { // 在我的世界只有最初的你
public void getAge() { // 你的年齡
System.out.println("18歲"); // 永遠18歲
}
});
主要內容
- 接口與抽象類和匿名內部類的關系
具體內容
匿名內部類也就是沒有名字的內部類,正因為沒有名字,所以匿名內部類只能使用一次,它通常用來簡化代碼編寫,但使用匿名內部類還有個前提條件:必須繼承一個父類或實現一個接口。
為什么需要存在有匿名內部類。
范例:觀察如下代碼
interface Message {
public void print();
}
class MessageImpl imlements Message {
public void print() {
System.out.println("Hello World !");
}
}
public class TestDemo {
public static void main(String args[]) {
fun(new MessageImpl());
}
public static void fun(Message msg) {
msg.print();
}
}
輸出結果:
Hello World !
正常的規律就是一個接口或者是抽象類需要有子類,子類要覆寫所有的抽象方法。
可是如果說現在的MessageImpl子類只使用唯一的一次,那么還有必要將其單獨定義為一個類嗎?所以這個時候,就可以采用匿名內部類的方式進行代碼的簡化。
范例:簡化后的代碼
interface Message {
public void print();
}
public class TestDemo {
public static void main(String args[]) {
fun(new Message() {
public void print() {
System.out.println("Hello World !");
}
});
}
public static void fun(Message msg) {
msg.print();
}
}
輸出結果:
Hello World !
下面這個代碼塊就被稱為匿名內部類。
{
public void print() {
System.out.println("Hello World !");
}
}
使用匿名內部類的時候,有一個前提:必須要基于接口或抽象類的應用。
但是需要強烈強調的是,如果匿名內部類定義在了方法里面,方法的參數或者是變量要被匿名內部類所訪問,那么必須加上final關鍵字(JDK 1.8之后此要求被改變了)。
總結
匿名內部類是在抽象類和接口的基礎上發展的,匿名內部類的最大好處是幫助用戶減少了類的定義。