Java - extends кажется вызывающим конструктором другого класса - PullRequest
0 голосов
/ 14 января 2012

Я пробую Java, и мне кажется, что я сталкиваюсь с некоторыми проблемами. Кажется, единственная проблема, с которой я сталкиваюсь, заключается в том, что когда я добавляю расширение класса Stars, конструктор, кажется, вызывается без меня, объявляющего такой тип, как Stars test = new Star ();

Knight.java

import javax.swing.JOptionPane;

public class Knight extends Stars {
    private String name;
    private int health, battles, age, gold;

    public Knight() {
        name = JOptionPane.showInputDialog("What is the knight's name?");
        String message = String.format("How much health does %s have?", name);
        health = Integer.parseInt(JOptionPane.showInputDialog(message));
        message = String.format("How many battles has %s been in?", name);
        battles = Integer.parseInt(JOptionPane.showInputDialog(message));
        message = String.format("How old is %s?", name);
        age = Integer.parseInt(JOptionPane.showInputDialog(message));
        message = String.format("How much gold does %s have?", name);
        gold = Integer.parseInt(JOptionPane.showInputDialog(message));
    }

    public String getStats() {
        // String message = 
        return String.format("\nKnight Name: %s\nKnight Health: %d\nKnight Battles: %d\nKnight Age: %d\nKnight Gold: $%d\n\n", name, health, battles, age, gold);
    }

}

Stars.java import javax.swing.JOptionPane;

public class Stars {
    private int rows, cols;
    private String skyScape = new String();

    public Stars() {
        rows = Integer.parseInt(JOptionPane.showInputDialog("How many rows of stars are there?"));
        cols = Integer.parseInt(JOptionPane.showInputDialog("How many columns of stars are there?"));
        for (int count = 0; count < rows; ++count) {
            if ((count % 2) == 1) {
                skyScape += " *";
            } else {
                skyScape += "*";
            }
            for (int colCount = 1; colCount < cols; ++colCount) {
                    skyScape += " *";
                    if (colCount == cols - 1) {
                        skyScape += "\n";
                    }
            }
        }
    }

    public int getRows() {
        return rows;
    }

    public int getCols() {
        return cols;
    }

    public String getSky() {
        return skyScape;
    }
}

Любая помощь будет оценена!

Ответы [ 4 ]

2 голосов
/ 14 января 2012

Java требует, чтобы каждый конструктор (кроме Object) вызывал некоторый конструктор суперкласса, чтобы обеспечить инициализацию данных, содержащихся в суперклассе.Если вы не вызовете конструктор суперкласса явно, компилятор вставит неявный вызов в конструктор суперкласса по умолчанию (с нулевым аргументом).

0 голосов
/ 14 января 2012

Поскольку вы расширяете класс Star Knight extends Stars, класс Stars также загружается в класс Knight, и, следовательно, вызывается и конструктор.

0 голосов
/ 14 января 2012

В этом нет ничего плохого. Всякий раз, когда вы instantiate подкласс, конструктор суперкласса должен вызываться перед выполнением конструктора подкласса.

0 голосов
/ 14 января 2012

Ваш конструктор вызывает конструктор базового класса.В противном случае члены базового класса не будут готовы к использованию.

...