【问题标题】:About super in subclass constructor?关于子类构造函数中的超级?
【发布时间】:2012-01-02 11:11:38
【问题描述】:

我正在尝试在子类中正确使用和理解构造函数。让我们从一些代码开始:

// creating an object
 account = new CreditAccount(accountNumber, personalNumber);

// constructor in superclass Account
public Account(int aNumber, int pNumber) {
accountNumber = aNumber;
personalNumber = pNumber;
}

// constructor in the subclass CreditAccount
public CreditAccount(int aNumber, int pNumber) {
super(accountNumber, personalNumber);
}

当我创建新对象creditAccount 时,我将accountNumberpersonalNumber 发送到子类中的构造函数。但我做得对吗? (不行!)要不要在子类中使用 super 来获取超类的构造函数的内容?

由于子类只从超类继承数据成员和方法,而不是构造函数,我很好奇如何做到这一点?

【问题讨论】:

  • 您是否尝试插入一些 sysout 以了解如何调用方法?
  • 代码看起来正确。 “它不起作用”到底是什么意思?会发生什么与您的预期不同?
  • 代码肯定看起来不正确。

标签: java inheritance constructor


【解决方案1】:

您没有指定什么不起作用,所以我认为这是简单的调用错误:

public CreditAccount(int aNumber, int pNumber) {
   super(accountNumber, personalNumber);
}

您应该使用相关参数调用super(),这些参数是派生类构造函数的输入:

public CreditAccount(int aNumber, int pNumber) {
   super(aNumber, pNumber);
}

【讨论】:

  • 啊哈!似乎那个小错误是问题所在!因此,通过这样做,我不需要像超类构造函数中的变量那样向子类中的构造函数添加更多内容: accountNumber = aNumber;当我在子类中使用这些值时,我将使用哪些变量? accountNumber 还是 aNumber?个人号码 = pNumber; ??
  • @3D-kreativ:超类的构造函数所做的一切都将通过调用super() 来完成,您只需要针对这个派生类执行额外的操作。在您的示例中,您无需在派生类的构造函数中再次设置personalNumber 和accountNumber。
猜你喜欢
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多