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); } |
号
编译器没有给我上面的错误,这让我有点困惑…
谢谢您,
子类中的构造函数没有"识别"超类中的字段,它接收到一些恰好与父类中的属性同名的参数,但原则上它们是不同的。它们被分配到超类的字段,因为您正在调用
1 | super(question, totalAttempts, averageTime, percentCorrect); |
在这行代码中,所有变量名都引用子类中的参数。它们的值被传递给基类构造函数,然后将它们分配给私有变量。混淆可能是因为参数和私有变量具有相同的名称。然而,你必须小心你所指的那些。这是构造函数的一种常见做法。