Lisp.超类(Superclasses)

defclass的第二个参数是一个超类的列表。一个类会继承它的所有超类的槽的并集。所以,如果我们想要定义一个screen-circle类,并且它是circle和graphic的子类,

[2]> (defclass graphic ()
  ((color :accessor graphic-color :initarg :color)
   (visible :accessor graphic-visible :initarg :visible :initform t)))
#<STANDARD-CLASS GRAPHIC>
[3]> 
(defclass circle screen-circle (circle graphic)
 ())

那么,screen-circle的实例就会有4个槽,每个超类继承两个。一个类并不强制要求创建自己的新槽;screen-circle的存在仅仅是为了提供一个可实例化的,并且是继承自circle和graphic的东西。


circle和graphic的accessors和initargs在screen-circle也同样有效:

[10]> (graphic-color (make-instance 'screen-circle :color 'red :radius 3))
RED

我们可以使每个screen-cricle有某种初始的颜色,这是通过在defclass中指定这个槽的initform来做到的:

[11]> (defclass screen-circle (circle graphic)
  ((color :initform 'purple)))
#<STANDARD-CLASS SCREEN-CIRCLE :VERSION 1>

现在screen-circle的实例默认颜色就是purple了:

[12]> (graphic-color (make-instance 'screen-circle ))
PURPLE


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值