下面代碼中,Person24 是一個抽象類,這意味著它不能被直接實例化,只能通過繼承它的子類來實現其抽象方法。代碼片段中展示了如何使用匿名內部類來實現一個抽象類的實例。
package chapter04;public class Java24_Object_匿名內部類 {public static void main(String[] args) {// TODO 面向對象// 在某些場合下,類的名字不重要,我們只想要使用類中的方法或功能,那么此時我們可以采用特殊的語法:匿名類// 所謂匿名類,就是沒有名字的類, 創建只使用一次的類的對象Me me = new Me();me.sayHello(new Person24() {@Overridepublic String name() {return "zhangsan";}});// 上面匿名類的寫法等價于下面的代碼// 創建一個名為 Zhangsan 的類繼承自 Person24class Zhangsan extends Person24 {@Overridepublic String name() {return "zhangsan";}}// 創建 Zhangsan 類的實例并傳遞給 sayHello 方法Person24 person = new Zhangsan();me.sayHello(person);}
}abstract class Person24 {public abstract String name();
}class Me {public void sayHello(Person24 person24) {System.out.println("Hello, " + person24.name());}
}
下面代碼片段中展示了如何使用匿名內部類來實現一個接口的實例。
package chapter04;public class Java24_Object_匿名內部類 {public static void main(String[] args) {// 使用匿名內部類來實現接口 Fly24new Fly24() {@Overridepublic void fly() {System.out.println("使用飛行器飛翔");}}.fly();// 上面匿名類的寫法等價于下面的代碼// 創建一個名為 PersonFly24 的類實現接口 Fly24class PersonFly24 implements Fly24 {@Overridepublic void fly() {System.out.println("使用飛行器飛翔");}}// 創建 PersonFly24 類的實例并調用 fly 方法PersonFly24 personFly24 = new PersonFly24();personFly24.fly();}
}// 接口中定義的屬性都是常量,不能更改
// 接口中定義的方法都是抽象的
interface Fly24 {void fly();
}