【问题标题】:How do I use the a private instance variable in a superclass?如何在超类中使用私有实例变量?
【发布时间】:2017-10-13 16:50:22
【问题描述】:

我目前正在学习我的 java 类中的继承。而且我不知道为什么我不能在我的子类中使用 super 变量“ID”。我的储蓄类构造函数有什么问题?此外,我不允许将帐户中的实例变量更改为公共。

     public class Account
{
private String ID;
private double balance;
private int deposits;
private int withdrawals;
private double service;

/**
 * Constructor for objects of class Account
 */
public Account(String IDNumber, double cashBalance)
{
    ID = IDNumber;
    balance = cashBalance;
    deposits = 0;
    withdrawals = 0;
    service = 0;
}

我收到错误消息“ID 在帐户中有私人访问权限”

    public class Savings extends Account
{
// instance variables - replace the example below with your own
private boolean active;

/**
 * Constructor for objects of class Savings
 */
public Savings(String IDNumber, double cashBalance)
{
    super(ID);
    super(balance);
    active = null;
}

【问题讨论】:

  • super(...) 并不意味着“从超类设置这个实例变量”;它的意思是“调用特定的超类构造函数,传递这些参数”。
  • Private 具有意义——JLS 详细解释了所有这些。简而言之,私人绝对意味着:它是私人的。而且在您的示例中,ID 甚至都没有值,因此调用不存在的具有不可访问的值的超级构造函数几乎没有意义。

标签: java inheritance subclass superclass super


【解决方案1】:

super() 调用父类的构造函数。它与该类的私有变量无关。

我认为你应该这样做:

super(IDNumber, cashBalance);

这会调用父类的构造函数,将 Savings 创建时使用的相同变量传递给 Account 类。

请注意,在Savings 类中,您将无法访问父变量。为此,您必须更改对 protected 的访问权限。 protected 允许类本身和子类访问,而private 只允许类本身访问。

【讨论】:

  • @ChristophT 请接受我的回答,以便其他人可以轻松识别正确答案。
  • 在 5 分钟后要求接受有点早。虽然不太可能,但总有一定的机会会出现其他有助于更多帮助的东西......
  • @GhostCat 没问题。很高兴它解决了你的问题。祝 Java 好运 :)
  • 我没有问这个问题。您可能需要多注意与您交谈的人。
  • @GhostCat 大声笑,对不起。一眼看去,你的刻痕是如此相似
猜你喜欢
  • 2014-12-27
  • 2012-04-10
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
相关资源
最近更新 更多