版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
首先创建一个接口Skill
public interface Skill {
public abstract void use();//施放技能的抽象方法
}
接口的实现类SkillImpl
public class SkillImpl implements Skill {
@Override
public void use() {
System.out.println("Biu-Biu");
}
}
创建一个类Hero
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;
}
}
运行类DemoGame
有三种不同的方式
- 使用单独定义的是实现类,必须要有接口的实现类
public class DemoGame {
public static void main(String[] args) {
Hero hero = new Hero();
hero.setName("艾希");//设置英雄的名称
//设置英雄的技能
//hero.setSkill(new SkillImpl());//使用单独定义的实现类
hero.attack();
}
}
- 使用匿名内部类
public class DemoGame {
public static void main(String[] args) {
Hero hero = new Hero();
hero.setName("艾希");//设置英雄的名称
//还可以改为使用匿名内部类
Skill skill = new Skill() {
@Override
public void use() {
System.out.println("Pia~Pia");
}
};
hero.setSkill(skill);
hero.attack();
}
}
- 进一步简化,使用匿名内部类和匿名对象
public class DemoGame {
public static void main(String[] args) {
Hero hero = new Hero();
hero.setName("艾希");//设置英雄的名称
//进一步简化,同时使用匿名内部类和匿名对象
hero.setSkill(new Skill() {
@Override
public void use() {
System.out.println("Biu~Biu~Pia~Pia");
}
});
hero.attack();
}
}