Java_接口回调与匿名内部类

Posted 依然耀眼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java_接口回调与匿名内部类相关的知识,希望对你有一定的参考价值。

匿名内部类

警告:匿名内部类本质上是一个对象

如果有一个接口或者抽象类,必须要用class定义一个实现类写重写抽象方法,才能创建对象并使用。

匿名内部类就是省略了用class定义子类的过程,直接使用父类或者接口创建子类对象

 1 //动物类
 2 public abstract class Animal{
 3     public void eat();
 4 }
 5 //饲养员类
 6 public class Feeder{
 7     public  void feed(Animal a){
 8         a.eat();
 9     }
10 }
11 //测试类
12 public class Demo4{
13     public static void main(String[] args){
14         //创建饲养员对象
15         Feeder f=new Feeder();
16         //饲养员养一个动物
17         f.feed(new Animal(){
18             public void eat(){
19                 System.out.println("狗吃骨头");
20             }
21         });
22         //饲养员养另一个动物
23         f.feed(new Animal(){
24             public void eat(){
25                 System.out.println("猫吃鱼");
26             }
27         });
28     }
29 }

 

接口回调

 1  
 2 //定义技能的接口
 3 public interface Skill {
 4     public void useSkill(); //释放技能
 5 }
 6 //英雄类
 7 public class Hero {
 8     private String name;//英雄的姓名
 9     private Skill skill;//英雄的技能
10     //设置技能
11     public void setSkill(Skill skill) {
12         this.skill = skill;
13     }
14     //开始玩
15     public void play(){
16         skill.useSkill();  //这里执行的是具体技能的复写方法
17     }
18 }
19 //测试类
20 public class Demo4 {
21     public static void main(String[] args) {
22         //创建英雄对象
23         Hero hero=new Hero();
24         //给英雄设置技能
25         hero.setSkill(new Skill() {
26             @Override
27             public void useSkill() {
28                 System.out.println("拱墙,拱砖...变大...踩鸭子");
29             }
30         });
31         //让英雄使用技能
32         hero.play();
33     }
34 }

 

下面是代码调用的流程,注意箭头的指向

以上是关于Java_接口回调与匿名内部类的主要内容,如果未能解决你的问题,请参考以下文章

Java核心技术 卷Ⅰ 基础知识

匿名内部类-Lambda表达式

阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_14_匿名内部类方式实现线程的创建

关于JAVA匿名内部类,回调,事件模式的一点讨论

“全栈2019”Java第一百零六章:匿名内部类与抽象类接口注意事项

java 匿名内部类