Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在子类中重用父类的方法,同时使用子类的变量_Java - Fatal编程技术网

Java 在子类中重用父类的方法,同时使用子类的变量

Java 在子类中重用父类的方法,同时使用子类的变量,java,Java,我必须用Java创建一个程序。这个程序必须在几个游戏中随机选择。所有这些游戏都必须询问一个或多个参数,这些参数总是字符串。当选择一个游戏时,它将分析和测试一个或多个参数,以确定玩家是赢还是输,并显示分数。当前的游戏是回文和字谜检测器 我创建了一个父类Games,在这个类中我有一个.run()方法,其中包含使游戏工作的所有方法 当我创建一个游戏实例(回文或字谜)时,我想知道是否可以在每个实例上使用.run()方法和实例变量 Palindrome palindrome = new Palindrom

我必须用Java创建一个程序。这个程序必须在几个游戏中随机选择。所有这些游戏都必须询问一个或多个参数,这些参数总是字符串。当选择一个游戏时,它将分析和测试一个或多个参数,以确定玩家是赢还是输,并显示分数。当前的游戏是回文和字谜检测器

我创建了一个父类Games,在这个类中我有一个.run()方法,其中包含使游戏工作的所有方法

当我创建一个游戏实例(回文或字谜)时,我想知道是否可以在每个实例上使用.run()方法和实例变量

Palindrome palindrome = new Palindrome();
palindrome.run();
这里,.run()不是在回文类中定义的,而是父类游戏的一种方法。当我调用它时,它接受父类的变量。我希望调用的变量是回文类的变量。

我找到了解决方案。 这里不需要重写.run()方法,我认为当您尝试使用POO方法时,它不是正确的解决方案

我将.run()方法留在抽象父类中,该方法使用所需的所有方法运行游戏。然后,我用抽象方法修改父类中的方法,并在所有子类中重写它们。 所以,当我创建父类的实例时,run()方法归父类所有。 我认为这是使用多态性的正确方法

例如:

public abstract class Games {
  public void run() {
    initGame();
  }

  /* 
    Several abstract methods
    Or not if method is generic, like count unknown parameters for each game
  */
 }

public class Game1 extends Games {

  // Some variables
  int nbParam = 2;      

  @Override
  /* 
     Override abstract methods in parent class like getDescription(), getNbParam(), 
     initGame(), setScore(), getScore(), etc...
  */
 }
因此,当我创建Game1实例并调用我的方法run时,变量就是Game1变量。
不止一种解决方案,但我认为它是使用多态性的正确方法。

在父类中创建一个构造函数,并使用参数设置实例字段的值。您必须在回文和字谜子类中重写run方法。所以我必须重写run方法吗?我不能只对实例变量使用parent.run()方法?