29 lines
748 B
Rexx
29 lines
748 B
Rexx
call dinnerTime "yogurt"
|
|
call dinnerTime .pizza~new
|
|
call dinnerTime .broccoli~new
|
|
|
|
|
|
-- a mixin class that defines the interface for being "food", and
|
|
-- thus expected to implement an "eat" method
|
|
::class food mixinclass object
|
|
::method eat abstract
|
|
|
|
::class pizza subclass food
|
|
::method eat
|
|
Say "mmmmmmmm, pizza".
|
|
|
|
-- mixin classes can also be used for multiple inheritance
|
|
::class broccoli inherit food
|
|
::method eat
|
|
Say "ugh, do I have to?".
|
|
|
|
::routine dinnerTime
|
|
use arg dish
|
|
-- ooRexx arguments are typeless, so tests for constrained
|
|
-- types must be peformed at run time. The isA method will
|
|
-- check if an object is of the required type
|
|
if \dish~isA(.food) then do
|
|
say "I can't eat that!"
|
|
return
|
|
end
|
|
else dish~eat
|