java 匿名类 实现接口_细谈 Java 匿名内部类 【分别 使用 接口 和 抽象类实现】...
1.前言
匿名內部類是什么東西?
沒有名字的內部類就是匿名內部類。
什么場景使用?
匿名內部類適合創建那種只需要一次使用的類。
這是個很有用的東西,可想而知,如果不使用匿名內部類,哪些只需要使用一次的類豈不是需要單獨做個文件存放?文件多起來,連名字都不好起,
這算是 給 起名字困難人群 巨大的福利啊!!!直接不要名字啦,哈哈哈哈哈
匿名內部類的使用需要接口或抽象類的使用,而使用抽象類又有點像Java多態知識點用法,當然區別還是有的。
2.操作
(1)使用接口實現匿名內部類
創建一個接口
packagecom.example.javabaisc.anonymous;public interfaceInterFood {public voideat();public voidcount();
}
創建一個測試類
packagecom.example.javabaisc.anonymous;importorg.junit.jupiter.api.Test;public classAnoTest {/*** 使用接口實現匿名內部類*/@Testpublic voidt1(){//方法一:實例接口后直接配置內部方法來實現邏輯
InterFood interFood = newInterFood() {
@Overridepublic voideat() {
System.out.println("吃蘋果");
}
@Overridepublic voidcount() {
System.out.println("100個");
}
};
interFood.eat();
interFood.count();//=================================
System.out.println("==============================================");//方法二:以接口實現的匿名內部類作為對象參數,直接傳入方法內使用
AnoTest anoTest = newAnoTest();
anoTest.ano(newInterFood() {
@Overridepublic voideat() {
System.out.println("這次要吃桃子。");
}
@Overridepublic voidcount() {
System.out.println("500個桃子夠嗎");
}
});
}public voidano(InterFood interFood){
interFood.eat();
interFood.count();
}
}
View Code
打印結果
【注意:
使用接口實現匿名內部類有個明顯的缺點,無法傳入參數,只能在內部類里面定義死,
但是可以 引入外部的常量,jdk8以下的需要使用final
packagecom.example.javabaisc.anonymous;importorg.junit.jupiter.api.Test;public classAnoTest {/*** 使用接口實現匿名內部類*/@Testpublic voidt1(){//jdk8以下的需要使用final//final int kk = 666;
int kk = 666;//方法一:實例接口后直接配置內部方法來實現邏輯
InterFood interFood = newInterFood() {
@Overridepublic voideat() {
System.out.println("吃蘋果");
}
@Overridepublic voidcount() {
System.out.println("100個");
}
};
interFood.eat();
interFood.count();//=================================
System.out.println("==============================================");//方法二:以接口實現的匿名內部類作為對象參數,直接傳入方法內使用
AnoTest anoTest = newAnoTest();
anoTest.ano(newInterFood() {
@Overridepublic voideat() {
System.out.println("這次要吃桃子。"+kk);
}
@Overridepublic voidcount() {
System.out.println("500個桃子夠嗎");
}
});
}public voidano(InterFood interFood){
interFood.eat();
interFood.count();
}
}
View Code
打印結果
】
(2)使用抽象類實現匿名內部類
創建一個抽象類
packagecom.example.javabaisc.anonymous;//抽象類
abstract public classAbstractFood {//抽象方法
abstract voidgetCount();//無參構造函數方法
publicAbstractFood() {
}//有參構造函數方法
publicAbstractFood(String name) {this.name =name;
}//變量屬性
privateString name;publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}
}
View Code
測試類
packagecom.example.javabaisc.anonymous;importorg.junit.jupiter.api.Test;public classAnoTest {/*** 使用抽象類實現匿名內部類*/@Testpublic voidt2() {//方法一:傳入參數
AbstractFood abstractFood = new AbstractFood("蘋果") {//初始化塊
{
System.out.println("匿名內部類的初始化塊...");
}
@OverridevoidgetCount() {
System.out.println("200個");
}
};
System.out.println(abstractFood.getName());
abstractFood.getCount();
System.out.println("==============================================");//
//方法二: 引用外部參數變量
String mname = "櫻桃";
AbstractFood abstractFood2= newAbstractFood() {//初始化塊
{
System.out.println("匿名內部類的初始化塊...");
}
@OverridevoidgetCount() {
System.out.println("50個");
}//即便不是抽象方法,也可以覆寫類里面的普通方法
@OverridepublicString getName() {returnmname;
}
};
System.out.println(abstractFood2.getName());
abstractFood2.getCount();
System.out.println("==============================================");//
//方法三:匿名內部類作為參數傳入方法中
AnoTest anoTest = newAnoTest();
anoTest.abs(new AbstractFood("火龍果") {//初始化塊
{
System.out.println("匿名內部類的初始化塊...");
}
@OverridevoidgetCount() {
System.out.println("10個");
}
});
}public voidabs(AbstractFood abstractFood) {
System.out.println(abstractFood.getName());
abstractFood.getCount();
}
}
View Code
打印結果
總結
以上是生活随笔為你收集整理的java 匿名类 实现接口_细谈 Java 匿名内部类 【分别 使用 接口 和 抽象类实现】...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 全排列非递归算法_全排列的非递
- 下一篇: java去掉字符串中前后空格函数_JAV