【问题标题】:Implementing abstract methods in a concrete class在具体类中实现抽象方法
【发布时间】:2016-08-13 21:59:06
【问题描述】:

我的大学项目有课程作业,但我正在为抽象类的概念而苦苦挣扎。我意识到拥有它们以创建子类的原因,并且我理解简单的抽象类示例。问题是要求实现一个具体的类,Selector,它实现了抽象方法。

创建一个抽象基类ASelector,有两个抽象方法selectorRange和selectorValue,如下:

  1. selectorRange 方法需要两个参数来定义从 min 到 max(包括)的可能值的整数范围,并具有以下签名 public abstract void selectorRange(int min, int max);

  2. selectorValue 方法返回一个随机生成的值,范围从 min 到 max(包括),并具有以下签名 public abstract int selectorValue();

创建一个具体的类 Selector,它使用适当的代码实现 ASelector 以实现这两种方法。

到目前为止,我有:

public class Selector extends ASelector {

 @Override
    public void selectorRange(int min, int max) {
       min = 1;
       max = 10;  
    }

    @Override
    public int selectorValue(int min, int max) {

         Random r = new Random();
         int randomNumber = r.nextInt(max - min) + min;

         return randomNumber;

    }
}

但我得到的错误是方法头中的 Selector。它说我还没有实现抽象方法,但我有吗?或者我认为我有。任何帮助,将不胜感激。

我的 ASelector 类:

public abstract class ASelector {

    public abstract void selectorRange(int min, int max);
    public abstract int selectorValue();
}

【问题讨论】:

  • 不影响你描述的问题,但是min = 1; max = 10;只是覆盖了selectorRange中的参数值;这没有任何用处。
  • 请出示你的ASelector班级。
  • 规范中的 public abstract int selectorValue( ) 与您的代码中的 public int selectorValue(int min, int max) { 不同。
  • ASelector 类如下: Public abstract class ASelector { public abstract void selectorRange(int min, int max);公共抽象整数选择器值(); }
  • 您没有覆盖抽象方法 selectorValue();你实际上是在试图超载它。

标签: java


【解决方案1】:

在您的班级选择器中,您应该存储最大和最小数字

     int max;
     int min;

那么你的 selectorValue 代码应该是这样的:

      public int selectorValue(){
          Random r = new Random();
          int randomNumber = r.nextInt(this.max - this.min) + min;
          return randomNumber;
        }

发生的情况是java允许方法重载,这意味着,您可以创建具有相同名称和不同输入属性的方法,它们会有所不同。这意味着public int selectorValue()public int selectorValue(int min, int max)不同,所以该方法没有实现。

由于在 Selector 中存储了 max 和 min,您的 selectorRange 应该是这样的:

    public void selectorRange(int min, int max) {
        this.min = min;
        this.max = max;  
    }

这会将您的内部 min 和 max 变量设置为参数 min 和 max 的值

【讨论】:

  • 根据您的描述,它只是充当二传手。
  • 啊啊啊我现在明白了。非常感谢伙计。
  • 欢迎你:)
  • 那么在为这个类编写测试工具时呢?在 main 方法中看起来如何?抱歉所有问题,我是编程新手
  • 首先你应该添加一个像public selectorRange(int max, int min)这样的构造函数,其代码与selectorRange或public selectorRange()基本相同,并设置默认值。至于测试人员只需创建一个对象并使用所有方法进行一些操作
【解决方案2】:

问题在于ASelector 定义

public abstract int selectorValue();

但是你实现了

public abstract int selectorValue(int min, int max);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    相关资源
    最近更新 更多