接口以及类作为成员变量

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;
    }
}

猜你喜欢

转载自blog.csdn.net/chen404897439/article/details/91988563