我有一个包含几个子类的类,它们都使用父类中的方法和字段。有没有“正确”的处理方式?
到目前为止,我一直(inherit method1 method2 ...)
在每个子类中使用。
我徒劳地寻找了一种父类可以强制子类继承绑定的方式,我知道这可能是不好的风格。
对 Racket 或 OOP 不是很有经验。
我有一个包含几个子类的类,它们都使用父类中的方法和字段。有没有“正确”的处理方式?
到目前为止,我一直(inherit method1 method2 ...)
在每个子类中使用。
我徒劳地寻找了一种父类可以强制子类继承绑定的方式,我知道这可能是不好的风格。
对 Racket 或 OOP 不是很有经验。
即使您不使用,这些方法也会被继承inherit
。要从超类调用方法,可以使用(send this method arg1 ...)
. 类表单(inherit method)
内的表单将使该方法在(method arg1 ...)
主体内的表单中可用。这不仅是一种方便的速记方式,而且比(send this method)
.
我不知道要继承的包名称的表单,但是您可以使用一个小宏来滚动自己的表单。这是一个例子:
(define-syntax (inherit-from-car stx)
(datum->syntax stx '(inherit wash buy sell)))
(define car% (class object%
(define/public (wash) (display "Washing\n"))
(define/public (buy) (display "Buying\n"))
(define/public (sell) (display "Selling\n"))
(super-new)))
(define audi% (class car% (super-new)
(inherit-from-car)
(define/public (wash-and-sell)
(wash)
(sell))))
(define a-car (new audi%))
(send a-car wash-and-sell)