接口作为成员变量类型
接口Skill :
1 public interface Skill { 2 3 void use(); // 释放技能的抽象方法 4 5 }
Hero类:
1 public class Hero { 2 3 private String name; // 英雄的名称 4 private Skill skill; // 英雄的技能 5 6 public Hero() { 7 } 8 9 public Hero(String name, Skill skill) { 10 this.name = name; 11 this.skill = skill; 12 } 13 14 public void attack() { 15 System.out.println("我叫" + name + ",开始施放技能:"); 16 skill.use(); // 调用接口中的抽象方法 17 System.out.println("施放技能完成。"); 18 } 19 20 public String getName() { 21 return name; 22 } 23 24 public void setName(String name) { 25 this.name = name; 26 } 27 28 public Skill getSkill() { 29 return skill; 30 } 31 32 public void setSkill(Skill skill) { 33 this.skill = skill; 34 } 35 }
SkillImpl实现类:
1 public class SkillImpl implements Skill { 2 @Override 3 public void use() { 4 System.out.println("Biu~biu~biu~"); 5 } 6 }
DemoGame :
1 public class DemoGame { 2 3 public static void main(String[] args) { 4 Hero hero = new Hero(); 5 hero.setName("艾希"); // 设置英雄的名称 6 7 // 设置英雄技能 8 // hero.setSkill(new SkillImpl()); // 使用单独定义的实现类 9 10 // 还可以改成使用匿名内部类 11 // Skill skill = new Skill() { 12 // @Override 13 // public void use() { 14 // System.out.println("Pia~pia~pia~"); 15 // } 16 // }; 17 // hero.setSkill(skill); 18 19 // 进一步简化,同时使用匿名内部类和匿名对象 20 hero.setSkill(new Skill() { 21 @Override 22 public void use() { 23 System.out.println("Biu~Pia~Biu~Pia~"); 24 } 25 }); 26 27 hero.attack(); 28 } 29 30 }
浙公网安备 33010602011771号