gpt4 book ai didi

class - Smalltalk 中的 self 和 super

转载 作者:行者123 更新时间:2023-12-04 06:07:58 25 4
gpt4 key购买 nike

我正在用 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
]
]

或者您可以将兴趣作为参数,或者您可以将兴趣作为层次结构根上的子类责任,然后每个子类都应该重新定义它。

基本上你说的是:
  • 在账户中根据利息重新计算余额是“xyz”
  • 在 PersonalAccount 中,根据利息重新计算余额是:
  • 优先,基于父类(super class)
  • 重新计算
  • "xyz"(稍作修改)

  • 不要认为你必须覆盖一个方法并调用 super 想想你在描述什么。

    关于class - Smalltalk 中的 self 和 super,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32801055/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com