學完匿名內部類就懂的情書。bash
// 情書
// 在個人世界你永遠18歲
me.world(new You() { // 在個人世界只有最初的你
public void getAge() { // 你的年齡
System.out.println("18歲"); // 永遠18歲
}
});
複製代碼
接口與抽象類和匿名內部類的關係學習
匿名內部類也就是沒有名字的內部類,正由於沒有名字,因此匿名內部類只能使用一次,它一般用來簡化代碼編寫,但使用匿名內部類還有個前提條件:必須繼承一個父類或實現一個接口。ui
爲何須要存在有匿名內部類。spa
範例:觀察以下代碼code
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子類只使用惟一的一次,那麼還有必要將其單獨定義爲一個類嗎?因此這個時候,就能夠採用匿名內部類的方式進行代碼的簡化。get
範例:簡化後的代碼string
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();
}
}
複製代碼
輸出結果:it
Hello World !
複製代碼
下面這個代碼塊就被稱爲匿名內部類。
{
public void print() {
System.out.println("Hello World !");
}
}
複製代碼
使用匿名內部類的時候,有一個前提:必需要基於接口或抽象類的應用。
可是須要強烈強調的是,若是匿名內部類定義在了方法裏面,方法的參數或者是變量要被匿名內部類所訪問,那麼必須加上final關鍵字(JDK 1.8以後此要求被改變了)。
匿名內部類是在抽象類和接口的基礎上發展的,匿名內部類的最大好處是幫助用戶減小了類的定義。