3

我有一个包含几个子类的类,它们都使用父类中的方法和字段。有没有“正确”的处理方式?

到目前为止,我一直(inherit method1 method2 ...)在每个子类中使用。

我徒劳地寻找了一种父类可以强制子类继承绑定的方式,我知道这可能是不好的风格。

对 Racket 或 OOP 不是很有经验。

4

1 回答 1

2

即使您不使用,这些方法也会被继承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)
于 2012-05-12T13:21:29.887 回答