java接口作为成员变量类型

java接口作为成员变量类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package cn.itcast.day11.demo07;

public class DemoGame {

public static void main(String[] args) {
Hero hero = new Hero();
hero.setName("艾希"); // 设置英雄的名称

// 设置英雄技能
// hero.setSkill(new SkillImpl()); // 使用单独定义的实现类

// 还可以改成使用匿名内部类
// Skill skill = new Skill() {
// @Override
// public void use() {
// System.out.println("Pia~pia~pia~");
// }
// };
// hero.setSkill(skill);

// 进一步简化,同时使用匿名内部类和匿名对象
hero.setSkill(new Skill() {
@Override
public void use() {
System.out.println("Biu~Pia~Biu~Pia~");
}
});

hero.attack();
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package cn.itcast.day11.demo07;

public class Hero {

private String name; // 英雄的名称


//使用接口作为成员变量类型
private Skill skill; // 英雄的技能

public Hero() {
}

public Hero(String name, Skill skill) {
this.name = name;
this.skill = skill;
}

public void attack() {
System.out.println("我叫" + name + ",开始施放技能:");
skill.use(); // 调用接口中的抽象方法
System.out.println("施放技能完成。");
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Skill getSkill() {
return skill;
}

public void setSkill(Skill skill) {
this.skill = skill;
}
}
1
2
3
4
5
6
7
package cn.itcast.day11.demo07;

public interface Skill {

void use(); // 释放技能的抽象方法

}
1
2
3
4
5
6
7
8
package cn.itcast.day11.demo07;

public class SkillImpl implements Skill {
@Override
public void use() {
System.out.println("Biu~biu~biu~");
}
}