【问题标题】:How do I override a method to make it return the number 2 only? (Java)如何覆盖方法以使其仅返回数字 2? (爪哇)
【发布时间】:2016-01-03 22:21:15
【问题描述】:
import java.util.Random;

public class Dice {
private int numOfSides;
private int[] sideValues = new int[getNumOfSides()];


public Dice(int numOfSides) {
    this.setNumOfSides(numOfSides);


    for(int i = 0; i < this.sideValues.length; i++) {
        sideValues[i] = i + 1;

    }
}
    public int Roll() {
        return (new Random()).nextInt(getNumOfSides()) + 1;


    }
    public int getNumOfSides() {
        return numOfSides;
    }
    public void setNumOfSides(int numOfSides) {
        this.numOfSides = numOfSides;
    }

}

import java.util.Random;

public class CheatDice extends Dice {



public CheatDice(int numOfSides) {
    super(numOfSides);

}

public int Roll() {
    return 2;


 }

}

 public class DiceTester {
public static void main(String[] args) {
    Dice a = new Dice(6);
    System.out.println(a.Roll());


    Dice b = new Dice(2120202);
    System.out.println(b.Roll());

    Dice d = new Dice(5);
    System.out.println(d.Roll());


  }

}

如何覆盖 Roll() 方法,使其仅打印数字 2?我无法理解覆盖。

编辑:感谢您的回答。有人可以解释为什么您需要一个与父类和子类构造函数具有相同签名的构造函数吗?还是我弄错了?

【问题讨论】:

  • 你已经覆盖Roll() 以在你的作弊骰子课程中返回2。我不明白你在问什么。
  • @azurefrog 使用这些行时,它不会将数字 2 打印到控制台: Dice d = new Dice(5); System.out.println(d.Roll());
  • 您的问题是,虽然您已经正确定义了 CheatDice,其中 Dice 中的 Roll 方法被覆盖,但您还没有创建任何 CheatDice 实例。顺便说一句,在CheatDice 中,您应该在Roll() 的声明中添加@Override 注释,以便编译器可以在您的覆盖不正确时警告您。此外,Java 中的约定是仅对类型名称(类、枚举)使用大写字母,对方法使用小写字母。
  • @JimGarrison 谢谢
  • 有人能解释一下为什么你需要一个与父类和子类构造函数具有相同签名的构造函数吗?还是我弄错了?

标签: java overriding


【解决方案1】:

在调用 Roll 时对代码进行以下更改:

Dice d = new CheatDice(5);

现在您会看到 2 正在返回。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 2015-02-05
    • 2015-07-20
    • 1970-01-01
    • 2021-07-15
    相关资源
    最近更新 更多