Java子类操作父类私有成员balance报错,符合UML规范如何解决?
错误原因
你写的super.getbalance()*=xxx语句无法编译,是因为getbalance()返回的是临时数值,属于仅能读取的右值,不能作为赋值操作的左操作数,所以会抛出unexpected type错误。
正确实现方案
不需要修改父类balance的private修饰符,只要拆分「读值-计算-写值」三个步骤,通过父类已经提供的public getter、setter方法操作即可,完全符合UML规范和封装要求:
public class child extends base{ private double interestRate; //constructors and getter/setters public void interest(){ double currentBal = super.getbalance(); double newBal = currentBal * Math.pow((1 + interestRate / 12), 12); super.setbalance(newBal); } }
如果追求代码精简也可以合并成一行:
public void interest(){ super.setbalance(super.getbalance() * Math.pow((1 + interestRate / 12), 12)); }
内容的提问来源于stack exchange,提问作者Mr.Glazes
相关产品推荐
相关产品推荐

