2

私はJavaを初めて使用するので、ここで何かを見落としている可能性があります.他のスレッドを見回しましたが、私の質問によく似たものは見つかりませんでした. 私はプライベート変数が子クラスに継承されていないことを知っています。私が抱えている質問は、なぜ super(); 子コンストラクターで、基本コンストラクターのフィールドを認識しますか? 親クラスのコンストラクタはパブリックですか?渡す変数はプライベートですが、子コンストラクターはそれらを認識し、関係なく渡しますか? 説明をいただければ幸いです。

親クラス:

public abstract class BaseQuestion {

private String questions;
private float totalAttempts;
private float averageTime;
private float percentCorrect;

public BaseQuestion(String questions, float totalAttempts, float averageTime, float percentCorrect){
    this.questions = questions;
    this.totalAttempts = totalAttempts;
    this.averageTime = averageTime;
    this.percentCorrect = percentCorrect;
}

子クラス:

public class TrueFalseQuestion extends BaseQuestion{
public static int questionsCreated;


public TrueFalseQuestion(String question, float totalAttempts, float averageTime, float percentCorrect){
    super(question, totalAttempts, averageTime, percentCorrect);

}

コンパイラは上記でエラーを出さないので、少し混乱します...

ありがとうございました、

4

2 に答える 2

3

子クラスのコンストラクターはスーパークラスのフィールドを「認識」しませんでした。スーパークラスの属性と同じ名前のパラメーターをいくつか受け取りましたが、それらは原則として異なります。super()スーパークラスのコンストラクターにアクセスするために呼び出しているため、それらはスーパークラスのフィールドに割り当てられます。それだけです。

于 2012-08-12T23:57:13.890 に答える
1
super(question, totalAttempts, averageTime, percentCorrect); 

このコード行では、すべての変数名が子クラスのパラメーターを参照しています。それらの値は、基本クラスのコンストラクターに渡され、プライベート変数に割り当てられます。混乱は、おそらくパラメーターとプライベート変数の名前が同じであるためです。ただし、どちらを参照しているのかに注意する必要があります。これは、コンストラクターの一般的な方法です。

于 2012-08-12T23:57:04.757 に答える