我正在用 Smalltalk 编写我的第一个程序。我有一个实现方法的父类(super class),然后是一个从该类继承并覆盖父类(super class)方法的子类。我认为 self 语句有困难,因为当子类调用该方法时,会调用父类(super class)和子类的平衡,因此存在累积效应,而不是两者兼而有之-或选择。
这是有问题的代码的摘录:
Object subclass: Account [
| balance |
...
getBalance [
^balance
]
calculateInterest [
balance:= (self getBalance)*0.2 + self getBalance.
]
]
Account subclass: PersonalAccount [
...
calculateInterest [
super calculateInterest.
balance := (self getBalance)*0.25 + self getBalance.
]
]
我该如何解决这个问题?
最佳答案
看起来您根本不必调用 super calculateInterest
但是为了更好的设计,请考虑以下实现:
Object subclass: Account [
| balance |
...
getBalance [
^balance
]
getInterest [
^ 0.2
]
calculateInterest [
balance:= self getBalance * self getInterest + self getBalance.
]
]
Account subclass: PersonalAccount [
...
getInterest [
^ 0.25
]
]
或者您可以将兴趣作为参数,或者您可以将兴趣作为层次结构根上的子类责任,然后每个子类都应该重新定义它。
基本上你说的是:
不要认为你必须覆盖一个方法并调用
super
想想你在描述什么。
关于class - Smalltalk 中的 self 和 super,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32801055/