一种接口的强制转型应用

一种接口的强制转型应用

标签(空格分隔): JAVASE


由于类在转成某个接口的时候不需要继承关系,因此可以通过接口的强制转型来实现不同功能的类的区分,下面通过简单的代码来说明。

在英雄联盟中,有时我们需要统计所有英雄使用的总物理伤害或总法术伤害。

实现功能,利用接口的强制转型,来实现调用不同的攻击方式,来实现只输出物理伤害或者法术伤害。

我们首先定义一个英雄类

public class Hero {
}

接下来定义攻击类型接口

public interface Shoot {
    //采用物理攻击
    void shoot();
}

public interface Skill {
    //采用技能攻击
    void skill();
}

然后创建AD英雄类AP英雄类混伤英雄类,并继承英雄类,根据不同的攻击方式来实现接口。

public class AdHero extends Hero implements Shoot{
    @Override
    public void shoot() {
        System.out.println("物理伤害");

    }
}

public class ApHero extends Hero implements Skill{
    @Override
    public void skill() {
        System.out.println("法术伤害");

    }
}

public class MixHero extends Hero implements Skill,Shoot{


    @Override
    public void skill() {
        System.out.println("混伤英雄的法术伤害");
    }
    public void shoot(){
        System.out.println("混伤英雄的物理伤害");
    }



}

接下来创建召唤师类,并选用相应的英雄,利用数组表示。

public class Summoner {

//创建英雄数组

    private Hero[] heroes;
    int index = 0;

    public Summoner(int hero) {
        this.heroes = new Hero[hero];
    }
    
//向己方阵营添加不同类型的英雄

    public void addHero(Hero hero) {

        if (index > heroes.length - 1) {
            System.out.println("英雄已满");
            return;
        }
        heroes[index] = hero;
        index++;
    }
    
//敌方有法术护盾,让英雄只进行物理伤害

    public void attackAd() {
        for (int i = 0; i < heroes.length; i++) {
        //这里就采用了接口的强制类型转换,不同于子类继承父类的向下转型,类在转成某个接口的时候不需要继承关系,进行接口的强制转型,进而根据接口的不同输出不同的伤害类型。
        //如果该英雄能够打出物理伤害,就进行对应的物理攻击。
            if (heroes[i] instanceof Shoot) {
                Shoot shoot = (Shoot) heroes[i];
                shoot.shoot();
            }
        }
    }
//敌方有物理护盾,让英雄只进行法术伤害
    public void attackAp() {
        for (int i = 0; i < heroes.length; i++) {
            //如果该英雄能够打出法术伤害,就进行对应的法术攻击。
            if (heroes[i] instanceof Skill) {
                Skill skill = (Skill) heroes[i];
                skill.skill();
            }

        }


    }
}

接下来进行测试

public class Test {
    public static void main(String[] args) {
        //一把比赛需要五个英雄
        Summoner summoner = new Summoner(5);
        summoner.addHero(new AdHero());
        summoner.addHero(new ApHero());
        summoner.addHero(new AdHero());
        summoner.addHero(new ApHero());
        summoner.addHero(new MixHero());
        //超出了会提示
        summoner.addHero(new MixHero());
        System.out.println("----------------------------");
        //只进行物理伤害攻击
       summoner.attackAd();
        System.out.println("============================");
        //只进行魔法伤害攻击
       summoner.attackAp();

    }

}

我们可以看到结果,通过接口的强制转型使用,对所有的物理伤害和法术伤害进行了统计

一种接口的强制转型应用_第1张图片

你可能感兴趣的:(java)