java - 两个类之间的属性依赖

标签 java constructor dependencies

我想编写一些文字冒险/地牢爬行类型的游戏。目前我有类 CreaturePlayerEnemyPlayerEnemy 类是 Creature 的子类。

我想让敌人的等级取决于玩家的等级。因此,例如,敌人的等级应该始终比玩家的等级高 1 级。所以当玩家是 4 级时,你应该只能面对 5 级的敌人。

我的想法是在 Enemy 类的构造函数中加入这样的东西:

 public Enemy(String name, int hp, int atk, int exp) {
    super(name, Player.getLevel + 1, hp, atk);
    this.exp = exp;
 }

但这显然是不允许的。现在我不知道如何实现这个结果。我对 Java 缺乏一些基本的了解,但我愿意学习。

我的代码现在看起来像这样。为了更好的可读性,我省略了 getter 和 setter。

public class Creature {

   private String name;
   private int    level;
   private int    hp;
   private int    atk;

   public Creature (String name, int level, int hp, int atk){
      this.name = name;
      this.level = level;
      this.hp = hp;
      this.atk = atk;
   }
}


public class Player extends Creature {

   private int currentEXP;
   private int expBar;

   public Player(String name) {
      super(name, 1, 100, 10);
      this.currentEXP = 0;
      this.expBar = 50;
   }
}


public class Enemy extends Creature {

   int exp;

   public Enemy(String name, int level, int hp, int atk, int exp) {
      super(name, level, hp, atk);
      this.exp = exp;
   }
}

最佳答案

首先,private修饰符使得level在子类中不可用。要解决这个问题,您可以将 private 更改为 protected(或什么都不做/默认),或者您可以提供一个可访问的 getter 方法 (int getLevel() {返回级别;})。

你的 Enemy 构造函数接受一个 level 参数,所以要实现 player level + 1 特性,你可以简单地传递 player .getLevel() + 1,或者传递 player.getLevel() 并让构造函数负责加 1。

使用这些类的方法(假设现在是 main)看起来像这样:

public static void main(String[] args) {  
    Player p = new Player("Player1");  
    Enemy e = new Enemy("Enemy1", p.getLevel() + 1, 100, 10, 40);  
}  

澄清一下,Player.getLevel + 1 不起作用的原因是因为 Player 是一个类,但您需要一个 Player object(即调用 new Player(...) 的结果)引用实例字段或方法,例如 getLevel

关于java - 两个类之间的属性依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42310030/

相关文章:

c++ - 如何为 vector <string> 设置默认参数以在类中的默认构造函数中使用?

java - 在Java中,为什么我的构造函数在外部类中时没有被调用?

java - 类路径中的类版本问题

java - 瓦丁 8 : change background color of description (tooltip)

java - 如何从 strings.xml 文件向数组插入字符串

java - 并行执行在 Selenium 页面对象模型中不起作用

java - 扫描仪需要更多字符?

javascript - 使用这种 JavaScript 编码模式来定义构造函数有什么好处?

.net - 在 C# dll 中缓存数据的最佳方法是什么?

javascript - 管理js依赖