Demo01
package cn.dali.code24;
/*类作为成员变量的时候,与String这种其实是一样的。
* 使用的时候,只需要创建好这个类的对象,赋值就可以了。
*
* 接口作为成员变量的时候,我们只需要在主方法中创建好符合改接口的对象,
* 通过set传进去即可使用。
* 可以通过实现类创建对象,也可以通过匿名内部类的方式创建对象,也可以创建匿名对象*/
public class Demo01 {
public static void main(String[] args) {
/*类作为成员变量*/
Weapon weapon = new Weapon("无尽之刃");//创建一个武器类的对象
Hero hero = new Hero("周杰伦",weapon);//把武器类对象作为参数传给hero类的对象
hero.attack();
System.out.println("============");
/*接口作为成员变量使用*/
/*第一种,创建实现类使用*/
Skill skill = new SkillImpl();//创建多态对象Skill,
hero.setSkill(skill);
hero.skillAttack();
System.out.println("============");
/*第二种,使用匿名内部类实现接口*/
Skill skill1 = new Skill() {
@Override
public void use() {
System.out.println("爱的魔力转两圈!~~");
}
};
hero.setSkill(skill1);
hero.skillAttack();
System.out.println("=============");
/*第三种,使用匿名对象匿名内部类实现接口*/
hero.setSkill(new Skill(){
@Override
public void use() {
System.out.println("爱的魔力转三圈!~~");
}
});
hero.skillAttack();
}
}
Hero类
package cn.dali.code24;
public class Hero {
private String name;//英雄名称
private Weapon weapon;//英雄用的武器
private Skill skill;//英雄使用技能
public Hero() {
}
public Hero(String name, Weapon weapon) {
this.name = name;
this.weapon = weapon;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Weapon getWeapon() {
return weapon;
}
public void setWeapon(Weapon weapon) {
this.weapon = weapon;
}
public void attack(){//英雄的功能
System.out.println(name+"正在用"+weapon.getName()+"打怪");
}
public Skill getSkill() {
return skill;
}
public void setSkill(Skill skill) {
this.skill = skill;
}
public void skillAttack(){
System.out.println("我要开始释放技能了");
skill.use();
}
}
Skill接口:
package cn.dali.code24;
public interface Skill {
public abstract void use();
}
Skill实现类
package cn.dali.code24;
public class SkillImpl implements Skill {
@Override
public void use() {
System.out.println("爱的魔力转圈圈!~~~~~");
}
}
Weapon武器类
package cn.dali.code24;
public class Weapon {
private String name ;//武器的名称
public Weapon(String name) {
this.name = name;
}
public Weapon() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}