Java中的匿名内部类

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 更多内容可看此博主的,博客内容生动详实 推荐!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值