匿名內部類是一種特殊的局部內部類,這種內部類沒有類名。適用於只使用一次並且不需要多次創建對象的類。使用匿名內部類可以使類代碼與創建對象同時完成,提高代碼的可維護性與靈活性。
package JAVA_Project_01_05;
//匿名內部類是一種特殊的局部內部類,這種內部類沒有類名。適用於只使用一次並且不需要多次創建對象的類。使用匿名內部類可以使類代碼與創建對象同時完成,提高代碼的可維護性與靈活性。
//使用匿名內部類的技術要點如下:
//
//· 匿名內部類的語法格式:“new實現的接口名或繼承的類名(){};”。
//
//· 匿名內部類是惟一一種沒有構造方法的類。所以匿名內部類的使用範圍有限。大部分匿名內部類用於接口的回調。
//
//· 匿名內部類在編譯時由系統自動起名爲Out$1.class。
//
//· 匿名內部類用於繼承其他類或實現接口,並不需要增加額外的方法,只是對繼承方法的實現與重寫。
interface AnonymityInter {//定義一個接口
public void method();
}
abstract class AnonymityAbstract {//定義一個抽象類
int count;
abstract void method();
}
class AnonymityClass {//定義一個類
public void method() {
System.out.println("這是一個普通的類");
}
}
public class TextAnonymity {//操作匿名內部類的類
public static void main(String[] args) {//Java程序主入口處
AnonymityInter inter = new AnonymityInter() {//實現接口的匿名內部類
public void method() {//實現接口中的方法
System.out.println("在匿名內部類中實現接口的方法");
}
};
inter.method();//調用方法
AnonymityAbstract aa = new AnonymityAbstract() {//實現抽象類的匿名內部類
{
count = (int) (10 * (Math.random() + 1));//隨機獲得數字
}
@Override
void method() {//重寫方法
System.out.println("您的幸運數字是:" + count);
}
};
aa.method();//調用方法
AnonymityClass ac = new AnonymityClass() {//實現普通類的匿名內部類
public void method() {//覆蓋類的方法
System.out.println("覆蓋類的方法");
}
};
ac.method();//調用方法
}
}
/*
(1)在程序中包含用匿名內部類實現接口的方法、繼承抽象類重寫方法以及對普通類的方法進行重寫。在重寫抽象類的匿名內部類中,在語句中定義要初始化的數字需要將初始化的數字放入大括號中,否則編譯不通過。
(2)在實現普通類的匿名內部類中,對method()方法進行重寫,覆蓋了原普通類中方法的實現。重寫也稱爲覆蓋,滿足覆蓋需要注意:覆蓋的方法的返回值必須和被覆蓋的方法的返回值一致;覆蓋的方法所拋出的異常必須和被覆蓋的方法所拋出的異常一致,或者是其子類;被覆蓋的方法不能爲private,否則在其子類中只是新定義了一個方法,並沒有對其進行覆蓋;覆蓋的方法的標誌必須要和被覆蓋的方法的標誌完全匹配,才能達到覆蓋的效果。
*/