public interface DisplayItem {
/**
* 获取物品的信息
* @return
*/
String getItemInformation();
}
总的定义一个接口,返回所有物品的展示的信息。
接口里面是方法;(没有返回值)
如果实现这个接口的话,我们都要实现这个结构的方法。
-------------------------------------------------------------------------------------------------------------------------------
public abstract class Item implements DisplayItem {
/**
* 物品的名称
*/
protected String name;
/**
* 关卡的编号
*/
protected int levelNumber;
protected boolean discovery; //”发现“
public Item(String name){
this.name = name;
}
public Item(String name, int levelNumber) {
this.name = name;
this.levelNumber = levelNumber;
}
public void setDiscovery(boolean discovery){
this.discovery = discovery;
}
}
实现接口的类必须实现接口中声明的所有方法。
我的Item类是一个抽象类,他继承的DisplayItem接口,抽象类里面有构造方法,接口没有
------------------------------------------------------------------------------------------------------------------------------
/**
* 怪物
*/
public class Monster extends Item{
public Monster(String name) {
super(name);
}
public Monster(String name, int levelNumber) {
super(name, levelNumber);
}
@Override
public String getItemInformation() {
return discovery ? name:"■";
}
}
Monster类他是继承这一个大类”Item“,子类会继承父类中所有的公开的和受保护的成员(成员变量和构造方法)
然后呢就是Monster类自己重载getItemInformation的方法,这里想一想什么叫三元运算符
------------------------------------------------------------------------------------------------------------------------------
/**
* 传送门
*/
public class Portal extends Item{
private boolean next; //属于传送门的私有方法
public Portal(boolean next) {
super("传送门");
this.next = next;
}
public Portal(String name, int levelNumber) {
super(name, levelNumber);
}
@Override
public String getItemInformation() {
if(discovery) {
return next ? "→" : "←";
}
return "■";
}
}
继承之后还可能有属于自己的成员变量,并且构造方法呢也不是和父类一模一样
//举个例子
super("传送门");
------------------------------------------------------------------------------------------------------------------------------
public class Treasure extends Item {
public Treasure(int levelNumber) {
super("宝箱", levelNumber);
}
/**
* 宝箱
*/
@Override
public String getItemInformation() {
return discovery ? "۞" : "■" ;
}
}
这个也是同理!!和上面
package com.cyx.pokemon.Item;
public class HP extends Item {
private int count;
public HP(int levelNumber,int count) {
super("天山雪莲", levelNumber); //可以直接用super赋值——》天山雪莲
this.count = count;
}
/**
* 使用药品可以回复血量
* @return
*/
public int use (){
count--;
// if (count == 0) return -1;
return 500*levelNumber;
}
/**
* 检测药品是否可以从背包中销毁
* @return
*/
public boolean canDestroy(){
return count == 0;
}
@Override
public String getItemInformation() {
return name;
}
}
使用一个物品,count-- 调用一次use方法少一个count,然后返还一个对应的值
=========================================================================