匿名內部類
警告:匿名內部類本質上是一個物件
如果有一個介面或者抽象類,必須要用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 }
下面是程式碼呼叫的流程,注意箭頭的指向