接口作为成员变量类型

接口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 }

 

posted @ 2020-12-14 11:53  Oooooooa  阅读(143)  评论(0)    收藏  举报