关于java:私有变量和继承的构造函数

Private variables and inherited constructors

我是Java新手,所以我可能在这里漏掉了一些东西——我在其他线程中四处寻找,但我没有发现任何与我的问题非常相似的东西。我知道私有变量不是由子类继承的。我有一个问题,为什么我的子构造函数中的super();识别了我的基构造函数中的字段?它是BC父类中的构造函数是公共的吗?即使它传递的变量是私有的,子构造函数也会识别它们并传递它们,不管怎样?如有任何澄清,将不胜感激。

父类:

1
2
3
4
5
6
7
8
9
10
11
12
13
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;
}

子类:

1
2
3
4
5
6
7
8
public class TrueFalseQuestion extends BaseQuestion{
public static int questionsCreated;


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

}

编译器没有给我上面的错误,这让我有点困惑…

谢谢您,


子类中的构造函数没有"识别"超类中的字段,它接收到一些恰好与父类中的属性同名的参数,但原则上它们是不同的。它们被分配到超类的字段,因为您正在调用super()来访问超类的构造函数,仅此而已。


1
super(question, totalAttempts, averageTime, percentCorrect);

在这行代码中,所有变量名都引用子类中的参数。它们的值被传递给基类构造函数,然后将它们分配给私有变量。混淆可能是因为参数和私有变量具有相同的名称。然而,你必须小心你所指的那些。这是构造函数的一种常见做法。