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 回答