多个父类

介绍多重继承:一个类可以有多个父类,并说明父类的书写顺序如何决定方法的查找优先级。

一个类可以拥有不止一个父类。我们可以有一个 TA(助教)类、一个 singer(歌手)类,还有一个 TA-singer 类。

(define-class (singer)
    (method (introduce) '(I am aiming for MTV awards!))
    (method (sing) '(tralala lalala)))

(define-class (TA)
    (method (introduce) '(GO BEARS!))
    (method (teach) '(Let me help you with that box-and-pointer diagram)) )

(define-class (singer-TA)
    (parent (singer) (TA)) )

(define-class (TA-singer)
    (parent (TA) (singer)) )
> (define rohin (instantiate singer-TA))
> (define mona (instantiate TA-singer))

> (ask rohin 'introduce)
(I am aiming for MTV awards!)

> (ask rohin 'sing)
(tralala lalala)

> (ask rohin 'teach)
(Let me help you with that box-and-pointer diagram)


> (ask mona 'introduce)
(GO BEARS!)

> (ask mona 'sing)
(tralala lalala)

> (ask mona 'teach)
(Let me help you with that box-and-pointer diagram)

注意,TA-singer 和 singer-TA 都继承了 TA 类和 singer 类,但顺序不同。当我们向这两个类的实例发送同一条消息时,写在前面的父类优先。

测验小抄

参加测验时,你可以携带这份表格,除此之外还有你通常可用的那张单面单页小抄(一面可双面书写的 cheat sheet)。