代码之家  ›  专栏  ›  技术社区  ›  Dariusz Legizynski

Java类扩展无法正常工作

  •  -3
  • Dariusz Legizynski  · 技术社区  · 6 年前

    我在玩java,一步一步地学习。不要写我一生的故事,它来了。

    我正在制作一个包含一些统计数据、玩家、敌人等的文本游戏。为此,我使用了类。最近,我遇到了“extends”函数,并正在尝试实现它。我制作了一个类角色,扩展到玩家和敌人。当我执行代码时,它似乎不会继承任何东西。如有任何建议,将不胜感激。谢谢

    P、 哪些标签可以使用?

    import java.util.Random;
    
    public class Character
    {
        Random rand = new Random();
    
        int cc;
        int strength;
        int life;
    
        //getters and setters
    }
    
    public class Player extends Character
    {
        int cc = rand.nextInt(20)+51;
        int strength = rand.nextInt(3)+4;
        int life = rand.nextInt(5)+16;
    }
    
    public class Enemy extends Character
    {
        int cc = rand.nextInt(10)+31;
        int strength = rand.nextInt(3)+1;
        int life = rand.nextInt(5)+6;
    }
    
    class myClass
    {
        public static void main(String[] args)                                                       
        {
        Player argens = new Player();
    
        System.out.println("This is you:\n");
        System.out.println("Close Combat " + argens.getCC());
        System.out.println("Strength " + argens.getStrength());
        System.out.println("Life " + argens.getLife());
    
    
        Enemy kobold = new Enemy();
    
        fight (argens, kobold);
    
        fight (argens, kobold);
        }
    
        static void fight(Player p, Enemy e)
        {
    
            p.setLife(p.getLife() - e.getStrength());
    
    System.out.println("\nRemaining life");
    
    System.out.println(p.getLife());
    
    System.out.println(e.getLife());
    
        }
    
    }
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   lexicore    6 年前

    此代码:

    public class Player extends Character
    {
        int cc = rand.nextInt(20)+51;
        int strength = rand.nextInt(3)+4;
        int life = rand.nextInt(5)+16;
    }
    

    不设置超类的字段。它在子类中声明并设置新字段,而不涉及超类的字段。

    要设置超类的字段,请将 protected 并在子类的构造函数中设置它们:

    public class Player extends Character
    {
        public Player()
        {
            cc = rand.nextInt(20)+51;
            strength = rand.nextInt(3)+4;
            life = rand.nextInt(5)+16;
        }
    }
    
        2
  •  1
  •   MarcinL    6 年前

    问题是,您没有在基类中覆盖这些值,而是在继承的中覆盖这些值。

    您应该在构造函数中初始化这些值。

    例子:

    public class Character {
      int cc;
      // ...
    }
    
    public class Player extends Character {
      public Player() {
        cc = 5;
        // ...
      }
    }
    

    您所做的是在基类中声明变量,而不是初始化它们,同时在子类中以相同的名称声明变量。

    更多阅读: https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html