hello大家好,我是雅崽吖!
接上一篇博文,今天分享一下接口的知识点,同样的也是愤怒的小鸟游戏,但是我们今天的小鸟就改了哦,他们可以添加不同的装备,包括:炸弹、喷火器、旋转引擎和加速马达。当然,炸弹鸟用炸弹爆炸攻击,喷火鸟用喷火器喷射火焰攻击,拥有旋转引擎的鸟儿可以旋转攻击,拥有加速马达的鸟儿可以加速冲撞攻击。我们要做的就是给鸟儿装上不同的装备,增加他们的攻击力。
直接看表格吧
名称 | 装备 | 攻击方式 |
炸弹鸟 | 炸弹 | 使用炸弹爆炸攻击 |
喷火鸟 | 喷火器 | 使用喷火器喷射火焰攻击 |
旋转鸟 | 旋转引擎 | 旋转攻击 |
超速鸟 | 加速马达 | 加速冲撞攻击 |
鸟儿装备上不同的装备就有不同的攻击方式,这里的知识点就是接口
先列一下关于接口的知识点,再做这个小游戏吧
1.什么是接口?
接口是一种规范和标准,可以约束其实现类的行为
2.应用场景
-
当名词之间不是is a的关系,由于java不能多继承,所以用到接口
-
作用: 定义接口可以解决JAVA中无法多重继承的问题。
3.接口语法:
定义
-
interface关键字来定义接口
-
public interface 接口名{
//方法体
}
-
实现
- implements关键字来实现接口
- public class 类名 implements 接口名{
//方法体
}
- public class 类名 implements 接口名{
现在我们可以写这个小游戏啦
还是一样的,先建类
好啦就这些,然后写各个类里的方法
小鸟类:
/**
*小鸟类
* 父类 抽象类
*/
public abstract class Bird {
private IEquipment equipment;
public Bird() {
}
public Bird(IEquipment equipment) {
this.equipment = equipment;
}
//飞
public void fly(){
System.out.println("弹射飞");
}
//叫
public void twitter(){
System.out.println("嗷嗷叫");
}
//攻击
public abstract void attack();
/**
* 鸟的行为
*/
public void show(){
fly();
twitter();
attack();
}
public IEquipment getEquipment() {
return equipment;
}
public void setEquipment(IEquipment equipment) {
this.equipment = equipment;
}
}
装备接口和各个装备:
/**
* 装备 接口
*/
public interface IEquipment {
//装备名称
String getName();
//展示功能
void show();
}
/**
* 炸弹
*/
public class Bomb implements IEquipment{
@Override
public String getName() {
return "炸弹";
}
@Override
public void show() {
System.out.println("使用"+this.getName()+"爆炸攻击");
}
}
/**
* 喷火器
*/
public class FlameThrower implements IEquipment {
@Override
public String getName() {
return "喷火器";
}
@Override
public void show() {
System.out.println("使用"+this.getName()+"喷火攻击!");
}
}
/**
* 旋转引擎
*/
public class SpinEngine implements IEquipment{
@Override
public String getName() {
return "旋转引擎";
}
@Override
public void show() {
System.out.println("使用"+this.getName()+"旋转攻击");
}
}
/**
* 加速马达
*/
public class AccelerationMotor implements IEquipment{
@Override
public String getName() {
return "加速马达";
}
@Override
public void show() {
System.out.println("使用"+this.getName()+"加速冲撞攻击");
}
}
然后写装上装备的鸟儿类:
/**
* 炸弹鸟
*/
public class BombBird extends Bird{
public BombBird() {
super(new Bomb());
}
@Override
public void attack() {
System.out.print("炸弹鸟攻击:");
this.getEquipment().show();
}
}
/**
* 喷火鸟
*/
public class FlameBird extends Bird {
public FlameBird() {
super(new FlameThrower());
}
@Override
public void attack() {
System.out.print("喷火鸟攻击");
this.getEquipment().show();
}
}
/**
* 旋转鸟
*/
public class SpinBird extends Bird {
public SpinBird() {
super(new SpinEngine());
}
@Override
public void attack() {
System.out.print("旋转鸟攻击:");
this.getEquipment().show();
}
}
/**
* 超速鸟
*/
public class SplitBird extends Bird {
public SplitBird() {
super(new AccelerationMotor());
}
@Override
public void attack() {
System.out.print("超速鸟攻击:");
this.getEquipment().show();
}
}
所有的类建好,就可以建Game类了
/**
* 模拟游戏
*/
import java.util.Scanner;
public class Game {
public static Bird chooseBird(int type){
Bird bird = null;
switch (type){
case 1:
bird = new BombBird();
break;
case 2:
bird = new FlameBird();
break;
case 3:
bird = new SpinBird();
break;
case 4:
bird = new SplitBird();
break;
}
return bird;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int type;
while (true){
System.out.println("——————————————————————————————————————————————————————————————————");
System.out.println("开始游戏... ...");
System.out.println("请选择鸟的类型:1.炸弹鸟 2.喷火鸟 3.旋转鸟 4.超速鸟 5.退出");
type = input.nextInt();
if(type >= 1&& type <= 4){
Bird bird = Game.chooseBird(type);
bird.show();
}else {
System.out.println("您已退出游戏!");
break;
}
}
}
}
运行结果如下:
这个小游戏到这里就结束啦
我要补充一下抽象类和接口的区别:
-
在jdk1.8版本之后,接口中,只能定义抽象方法和静态方法,和默认方法(default定义)
-
抽象类中可以定义实例方法也可以定义抽象方法,也可以没有抽象方法
-
抽象类利于代码复用,接口利于代码的扩展和维护
(欢迎评论补充哦……)
好啦,今日份分享就到这里,我们下次见~