小编Ric*_*ick的帖子

为什么在重写超类方法时会调用该方法?(来自OCA实践测试)

这些OCA练习题(pdf)中的问题3 :

abstract class Writer {
   public static void write() {
      System.out.println("Writing...");
   }
}

class Author extends Writer {
   public static void write() {
      System.out.println("Writing book");
   }
}

public class Programmer extends Writer {
   public static void write() {
      System.out.println("Writing code");
   }
   public static void main(String[] args) {
      Writer w = new Programmer();
      w.write();
   }
}
Run Code Online (Sandbox Code Playgroud)

输出为Writing...

我不明白为什么。作为Programmer重写Writer的write方法,我认为它应该在中Programmer而不是在中调用该方法Writer

为什么?

java static overriding method-hiding

3
推荐指数
1
解决办法
325
查看次数

构造函数在调用之前链接并准备参数(aguments)

我正在做一个Yahtzee游戏.我想为不同的情况提供构造函数.假设您无法提供想要创建新游戏的玩家的名字,我想创建"未命名玩家1","未命名玩家2"等.

这是我试图这样做的方式:

public class YahtzeeGame {
    private List<Player> players = new ArrayList<>();

    public YahtzeeGame(String[] playerNames) {
        for (String playerName : playerNames) {
            players.add(new Player(playerName));
        }
    }

    public YahtzeeGame(int numberOfPlayers) {
        String[] playerNames = new String[numberOfPlayers];
        for (int i = 0; i < numberOfPlayers; i++) {
            playerNames[i] = "Unnamed player " + (i+1);
        }
        this(playerNames); // ERROR: "Constructor call must be the first statement in a constructor.
    }

    public YahtzeeGame(String playerName) {
        this(new String[] {playerName});
    }

    public YahtzeeGame() {
        this("Unnamed player"); …
Run Code Online (Sandbox Code Playgroud)

java constructor constructor-chaining

2
推荐指数
1
解决办法
114
查看次数