Java_介面回撥與匿名內部類

依然耀眼發表於2021-05-20

匿名內部類

警告:匿名內部類本質上是一個物件

如果有一個介面或者抽象類,必須要用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 }

 

下面是程式碼呼叫的流程,注意箭頭的指向

相關文章