私有变量和继承的构造函数

时间:2012-08-12 23:54:05

标签: java inheritance constructor private super

我是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);

}

编译器没有给出上述错误,这让我有点困惑......

谢谢,

2 个答案:

答案 0 :(得分:3)

子类中的构造函数没有“识别”超类中的字段,它接收到一些恰好与超类中的属性具有相同名称的参数,但它们原则上是不同的。它们被分配到超类'字段,因为你正在调用super()来访问超类'构造函数,就是这样。

答案 1 :(得分:1)

super(question, totalAttempts, averageTime, percentCorrect); 

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

相关问题