我是Java的新手,所以我可能在这里错过了一些东西 - 我在其他线程中环顾四周,但我找不到任何与我的问题非常相似的东西。我知道私有变量不是由子类继承的。我有的问题,为什么super();在我的子构造函数中识别我的基础构造函数中的字段? bc父类中的构造函数是公共的吗?即使它传递的变量是私有的,子构造函数会识别它们并传递它们而不管它们是什么?任何澄清将不胜感激。
父类:
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);
}
编译器没有给出上述错误,这让我有点困惑......
谢谢,
答案 0 :(得分:3)
子类中的构造函数没有“识别”超类中的字段,它接收到一些恰好与超类中的属性具有相同名称的参数,但它们原则上是不同的。它们被分配到超类'字段,因为你正在调用super()
来访问超类'构造函数,就是这样。
答案 1 :(得分:1)
super(question, totalAttempts, averageTime, percentCorrect);
在这行代码中,所有变量名称都引用子类中的参数。它们的值被传递给基类构造函数,然后将它们分配给私有变量。混淆可能是因为参数和私有变量具有相同的名称。但是,你必须要小心你指的是哪些。这是构造函数的常见做法。