Java中的匿名内部类
1、什么是匿名内部类?
匿名内部类是不显式定义在方法体内或者代码块中没有名字的类;
通常在创建实例对象实现接口时或者实现某个代码块由系统内部分配类名来进行定义。
2、为什么使用匿名内部类?
首先别忘了定义,一般在创建对象实现接口或者继承代码块时进行定义;
那就需要区分一下一般实现接口与使用匿名内部类实现接口的区别:
下面通过对比两种方式来实现动物的叫声:
public interface Ainterface01{
void cry();
}
##一般接口实现
public class Dog implements Ainterface01{
@Override
public void cry(){
System.out.println("小狗汪汪叫。。。。。");
}
}
通过上述代码可看出实现接口方法需要重新定义一个类,而且如果此方法我们只是用一次的话,新建的类就显得冗余了,因此引出匿名内部类,使用一次就不可用,但是已经创建的对象再次使用;
public static void main(String[] args){
Ainterface01 a=new Ainterface01(){#此处就创建立匿名内部类,
# a的编译类型为Ainterface01,运行类型为系统内分配的匿名内部类名 可用 a.getClass() 查看类名
@Override
public void cry(){
System.out.println("小狗汪汪叫。。。。。");
};
a.cry();
}
3、怎么用?
定义匿名内部类的方式:
1
接口/类名 实例名=new 接口/类名(参数1, 参数2...){
实现方法1(){
}
实现方法2(){
}
......
};
实例名.实现方法();
2
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("奋斗5天,期末考试我要过Java");
}
}).start();
4. 匿名内部类应用实例
1.实现Animal接口的smile()方法展现动物的笑声;
public class Annomy {
public static void main(String[] args) {
Animal animal =new Animal(){
@Override
public void smile() {
System.out.println("动物会笑。。。。");
}
};
animal.smile();
}
}
interface Animal{
void smile();
}
输出结果:动物会笑。。。。
2.
package com.hspedu.high;
public class Annomy {
public static void main(String[] args) {
CellPhone cellPhone = new CellPhone();
cellPhone.alarmclock(new Bell() {
@Override
public void ring() {
System.out.println("懒猪起床。。。。");
}
});
}
}
interface Bell{
void ring();
// void course();
}
class CellPhone{
public void alarmclock(Bell bell){
bell.ring();
}
}
输出结果:
本文参考:https://blog.csdn.net/m0_72853403/article/details/130759195 更多内容可看此博主的,博客内容生动详实 推荐!!!