Java8 中接口新增了default和static方法,這兩種方法在接口中都可以有具體實現。
普通的抽象方法和default方法會被子類繼承,子類必現實現普通抽象方法,而default方法子類可以實現,也可以選擇不實現。
static方法不能被繼承,也不能被子類實現,只能被自身調用
1.定義一個接口
定義一個璃月角色攻擊模式的接口, 重擊和普通攻擊有固定倍率,而大招傷害因為每個角色不同,需要單獨結算。而滑翔技能因為沒有傷害,所以不需要繼承實現,於是使用了靜態方法
/**
* 璃月地區角色攻擊方式及倍率接口
*/
public interface LiYue {
/**
* 元素爆發技能,每個角色的計算方式不同,需要具體實現
* @param atk 攻擊力
* @return 傷害
*/
Integer elementalBurst(int atk);
/**
* 重擊,,默認倍率 100%
* @param atk 攻擊力
* @return 傷害
*/
default Integer thump(int atk) {
return new Double(Math.floor(atk * 2)).intValue();
}
/**
* 普通攻擊,默認倍率 50%
* @param atk 攻擊力
* @return 傷害
*/
default Integer attack(int atk) {
return new Double(Math.floor(atk * 1.5)).intValue();
}
/**
* 滑翔操作,沒有傷害
*/
static void gliding(String name) {
System.out.println(name + "滑翔");
}
}
2.繼承接口的類
- 1.第一個角色是刻晴,她的重擊和普通攻擊是固定倍率,只需要實現大招。
/**
* 刻晴
*/
public class KeQing implements LiYue {
/**
* 元素爆發技能,倍率 1000%
* @param atk 攻擊力
* @return 傷害
*/
@Override
public Integer elementalBurst(int atk) {
return atk * 10;
}
}
- 2.而胡桃作為版本之子,她的重擊和普通攻擊和其他人不一樣,所有技能都要實現
/**
* 胡桃
*/
public class HuTao implements LiYue {
@Override
public Integer elementalBurst(int atk) {
return atk * 20;
}
@Override
public Integer thump(int atk) {
return atk * 4;
}
@Override
public Integer attack(int atk) {
return atk * 2;
}
}
3.測試
進行一次打Boss 測試
public class TestBoss {
static int atk = 1700;
static void keQingSub() {
KeQing keQing = new KeQing();
LiYue.gliding("刻晴");
int damage = keQing.attack(atk) * 3 + keQing.thump(atk) + keQing.elementalBurst(atk);
System.out.println("刻晴的傷害總值:" + damage);
}
static void huTaoSub() {
HuTao huTao = new HuTao();
LiYue.gliding("胡桃");
int damage = huTao.attack(atk) * 3 + huTao.thump(atk) + huTao.elementalBurst(atk);
System.out.println("刻晴的傷害總值:" + damage);
}
public static void main(String[] args) {
keQingSub();
huTaoSub();
}
}
輸出:
刻晴滑翔
刻晴的傷害總值:28050
胡桃滑翔
刻晴的傷害總值:51000
結論,胡桃的傷害比刻晴高!
