Java 最佳OOP方法和实践

Java 最佳OOP方法和实践,java,oop,inheritance,Java,Oop,Inheritance,我正试图遵循此任务的最佳OOP实践。我的目标是在敌人和玩家之间使用“生物”职业。通过这种方式,他们可以继承某些可重复使用的代码,如攻击、防御、死亡和统计数据(hp、攻击等)。我以为我走的是正确的道路,但现在我真的被卡住了,因为我找不到正确实施的方法,最重要的是,我不确定我是否遵循了最佳实践 我希望我的结构如下所示: Creature | | / \ enemy player \ classes 如果需要,这里有一些代码可

我正试图遵循此任务的最佳OOP实践。我的目标是在敌人和玩家之间使用“生物”职业。通过这种方式,他们可以继承某些可重复使用的代码,如攻击、防御、死亡和统计数据(hp、攻击等)。我以为我走的是正确的道路,但现在我真的被卡住了,因为我找不到正确实施的方法,最重要的是,我不确定我是否遵循了最佳实践

我希望我的结构如下所示:

   Creature
      |
      |
     / \
 enemy player
         \
       classes
如果需要,这里有一些代码可以更好地说明

public class creature {
    
    protected static int hp = 150;
    protected static int mp = 35;
    protected static int str = 10;
    protected static int dex = 10;
    protected static int intell = 10;
    protected static int mnd = 10;
    protected static int lck = 10;
    protected static int attack = 15;
    protected static int level = 1;
    protected static int enemyHP = 150;
    
//  public static int playerAttack(int attackDmg) {
//      int damageDealt = ThreadLocalRandom.current().nextInt(7, attackDmg);
//      return damageDealt;
//  }
    
    public static int defend(int dmgReduction) {
        int damageTaken = ThreadLocalRandom.current().nextInt(25, dmgReduction);
        return damageTaken;
    }
    
    public static void enemyDeath(int enemyHP) {
        
    }
    
    public static void playerDeath() {
        
    }
} 
敌人阶级,

public class enemy extends creature {   
    //potentially store values in an array to randomly select value, then add hp of each enemy
    //such that 155 selected, Brittle Skeleton HP modifier could be + 5 hp, or * 1.86 etc...
    static int[] enemy_HP = {155, 144, 129};
    public static String brittleSkeleton() {
        
        String enemy = "Brittle Skeleton";
        creature.hp += 5;
        creature.mp += 15;
        creature.str += 1;
        creature.dex += 2;
        creature.intell += 4;
        creature.mnd += 0;
        creature.lck += 3;      
        return enemy;
    }
    
    public static int getBrittleSkeletonHp() {
    //  int damageDone = enemy.hp - mage.getAttack();
        return enemy.hp;
    }
    
    public int enemyAttack() {
        return enemy.attack;
    }
    public static int getEnemyRemainingHealth() {
        
        return enemy.enemyHP - mage.getAttack();
    }
}

欢迎任何建议,我对这方面还是新手,但我想确保我有很好的有意义的结构化代码。我应该如何构造这个?而我目前拥有的是,这样构造它有意义吗?

只需将
生物
变得更一般..例如
死亡
而不是
enemyDeath
…然后在子类中通过调用
超级
覆盖死亡(以及其他两者类似的死亡)

公共类生物{
...
//也排除静态关键字
//公共int PlayerTack(int attackDmg){
//int damageDemand=ThreadLocalRandom.current().nextInt(7,attackDmg);
//退货损失;
//  }
//这里有所有常用选项
公共内部防御(内部防御){
int damagetake=ThreadLocalRandom.current().nextInt(25,dmgReduction);
退货损失;
}
//这是删除
//公共无效enemyDeath(int enemyHP){}
公共静态无效死亡(){}
} 
现在在子类<代码>敌人<代码>中

公共类敌人扩展生物{
..//实例字段仅在敌人中找到。。。
//凌驾于死亡之上
@凌驾
公众死亡(){
//首先确保设置了默认值…例如所有死亡都必须有
超级。死亡();
//现在是敌人独有的代码
}
}
这个概念只是概括了生物中的一切。。。
然后重写特定操作的方法…

我认为您误解了
static
——该类及其所有子类的所有对象都有一个实例。因此,在
敌人
中更改这些值(请使用Java标准类名-
敌人
)会更改所有生物、敌人和玩家的值。另外,
生物
拥有
enemyDeath()
playerDeath()
是错误的。没有所谓的“最佳实践”,每个人都有自己的观点,什么是“最佳”,甚至对一个人来说,“最佳”也可能是相当不稳定的,这取决于项目和背景。谢谢@Jim。感谢您的反馈!谢谢你,马克,这真的让人大开眼界。也许我太努力了。