From b50a2c7518426512c897a509e046795ae6c88462 Mon Sep 17 00:00:00 2001 From: Asumu Takikawa Date: Fri, 3 Feb 2012 10:31:55 -0500 Subject: [PATCH] Add documentation for abstract clause. --- collects/scribblings/reference/class.scrbl | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/collects/scribblings/reference/class.scrbl b/collects/scribblings/reference/class.scrbl index 9c1bed8b2f..ae6cbcf0a3 100644 --- a/collects/scribblings/reference/class.scrbl +++ b/collects/scribblings/reference/class.scrbl @@ -243,8 +243,8 @@ interface @racket[(class->interface object%)], and is transparent @defform/subs[ #:literals (inspect init init-field field inherit-field init-rest init-rest public pubment public-final override override-final overment augment augride - augment-final private inherit inherit/super inherit/inner rename-super - rename-inner begin lambda case-lambda let-values letrec-values + augment-final private abstract inherit inherit/super inherit/inner + rename-super rename-inner begin lambda case-lambda let-values letrec-values define-values #%plain-lambda) (class* superclass-expr (interface-expr ...) class-clause @@ -267,6 +267,7 @@ interface @racket[(class->interface object%)], and is transparent (augride maybe-renamed ...) (augment-final maybe-renamed ...) (private id ...) + (abstract id ...) (inherit maybe-renamed ...) (inherit/super maybe-renamed ...) (inherit/inner maybe-renamed ...) @@ -451,6 +452,7 @@ a syntax error. [(augride maybe-renamed ...) ("clmethoddefs")] [(augment-final maybe-renamed ...) ("clmethoddefs")] [(private id ...) ("clmethoddefs")] + [(abstract id ...) ("clmethoddefs")] [(inherit maybe-renamed ...) ("classinherit")] [(inherit/super maybe-renamed ...) ("classinherit")] [(inherit/inner maybe-renamed ...) ("classinherit")] @@ -643,9 +645,9 @@ external names. Each @racket[public], @racket[override], @racket[augment], @racket[pubment], @racket[overment], @racket[augride], @racket[public-final], @racket[override-final], -@racket[augment-final], and @racket[private] clause in a class -declares one or more method names. Each method name must have a -corresponding @racket[_method-definition]. The order of +@racket[augment-final], and @racket[private] +clause in a class declares one or more method names. Each method name +must have a corresponding @racket[_method-definition]. The order of @racket[public], @|etc|, clauses and their corresponding definitions (among themselves, and with respect to other clauses in the class) does not matter. @@ -713,6 +715,12 @@ using the @racket[inner] form. The only difference between @racket[inner] is that @racket[public-final] prevents the declaration of augmenting methods that would be ignored. +A method declared with @racket[abstract] must be declared without +an implementation. Subclasses may implement abstract methods via the +@racket[override], @racket[overment], or @racket[override-final] +forms. Any class that contains or inherits any abstract methods is +considered abstract and cannot be instantiated. + @defform*[[(super id arg ...) (super id arg ... . arg-list-expr)]]{