如何在不使用 setter 的情况下从子类访问超类中的私有字段?

cfreq744

我已经提供了一个名为Account的超类,带有构造函数来初始化余额,以及存款和提取余额的方法,余额被声明为私有。我根本无法添加或更改此类中的任何方法或变量

然后,我创建了一个名为SavingsAccount的子类,其构造函数接受初始余额。如果初始余额为负,则该帐户应以余额 0 进行初始化。此外,它包含两个覆盖方法,即存款和取款,用于检查存款和取款的金额以查看是否可能。这是我提供的代码(帐户)和我编写的代码(SavingsAccount)。

我尝试在 if-else 条件中调用 super(),但 Java 给出了一个错误,即 super() 调用必须是构造函数的第一行。那么,我该如何解决这个问题?另外,由于我在提供的 Account 类中没有 setBalance() 方法,我如何通过我的 SavingsAccount 类中的存款和取款方法设置余额?

Account.Java(用于测试,不可修改)

public class Account 
{
  private double balance;

    // Constructor to initialise balance
    public Account( double amount )
    {
            balance = amount;
    }

    // Overloaded constructor for empty balance
    public Account()
    {
            this(0.0);
    }

    public void deposit( double amount )
    {
            balance += amount;
    }

    public void withdraw( double amount )
    {
            balance -= amount;
     }

    public double getBalance()
    {
            return balance;
    }
}  

SavingsAccount.java(我写的)

public class SavingsAccount extends Account
{
   private int overDraftCount = 0;
   public SafeAccount(double initial_balance)
   {
      if(initial_balance <0)
      {
       super(0.00);
      }
      else
      {
       super(initial_balance);
      }
    }

   @Override
   public void deposit(double amount)
   {
    if(amount < 0)
   {
      ??? = getBalance(); 
   }
    else
   {
      ??? = getBalance()+ amount;
   }
  }
  @Override
  public void withdraw(double amount)
  {
    if(amount < getBalance())
    {
     overDraftCount++;
     ??? = getBalance();
    }

    else
    {
      ??? = getBalance() - amount;
     }
   }

  public int overdraftAttempts()
  {
     return overDraftCount;
  }
 }
民进党

您可以更改构造函数以使用三元运算符:

public SafeAccount(double initial_balance) {
  super(initial_balance < 0 ? 0.00 : initial_balance);
}

关于您的第二点,您将必须使用现有方法从/向帐户提取或存入储蓄,如下所示:

@Override
public void deposit(double amount) {
  if(amount > 0) {
    super.deposit(amount);
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不使用Setter的情况下使用Getter

如何在不使用分配的情况下访问类中的私有变量?

如何在不使用final的情况下禁用setter的生成?

TypeScript:如何在不使用明确赋值断言的情况下使用 setter 初始化类的成员?

Kotlin:如何在不使用getter和setter的情况下在ViewModel中更改MutableLiveData的值

如何在没有 getter/setter(注入)的情况下测试使用私有参数的方法?

Dapper如何在不使用setter的情况下设置属性

如何使用Bytebuddy拦截字段访问(不使用getter / setter)

React useState setter 如何在不使用状态变量的情况下更新此状态变量?

如何在不使用setter的类内设置类的成员变量?

如何在不引起StackOverflowError的情况下覆盖子类中的setter?

Jaxb在不使用getter / setter的情况下取消编组

在 Java 中,如何在不访问 Deque 类中的私有字段的情况下在 Deque 类的子类中实现新功能?

如何在不使用常量数组大小的情况下初始化私有类中的数组?

在不使用python数据类的setter的情况下拥有属性getter的pythonic方法是什么?

如何在不使用类名的情况下从类中访问类本身

如何避免未使用的setState函数?可以在不使用setter的情况下创建React useState吗?

如何对嵌套字段使用 setter

如何从子类访问java中超类的受保护字段?

如何在不使用Malloc的情况下使typedef尽可能私有?

为什么GSON使用字段而不使用getter / setter?

在休眠JPA的getReference()之后不使用setter发出select的情况下无法更新

如何在ImmutableJS Record扩展类上使用setter

如何在抽象类中使用getter和setter

Java Json Jackson 在没有 getter 和 setter 的情况下保存私有字段

如何在不使用抽象的情况下强制实现子类中的方法?

子类的构造函数如何访问超类的私有字段变量?

在Spring中如何在Java配置中使用setter注入?

如何在不使用C#定义静态类的情况下访问const值?