F是一個類型參數,它可以被實例化成一個具體的類型。類似於變量的類型定義,一個bound如F<:Vegitable限製了F隻能被Vegitable及其子類型所實例化。所以,VegitarianEating[Vegitable],VegitarianEating[Carrot]都是合法的類型。而VegitarianEating[Beef]就不是一個合法的類型。類型VegitarianEating[Vegitable]是VegitarianEating的一個實例,同時它等價於類型Vegitarian.(用的是基於結構的subtype)
於是,有:
對任意F<:Vegitable,VegitarianEating[F]<:PersonEating[F]
對於原來的Vegitarian類型,有:
Vegetarian=VegetarianEating[Vegetable]<:PersonEating[Vegitable]
這種關係,正確地表達了“一個素食者是一個吃蔬菜的人”的概念。
請前往oop.tw閱讀本書最新內容
除了BoundedTypeParameterization之外,還有一種類似的方法也可以解決這個素食者的問題。這種方法被叫做:BoundedAbstractType請看這個定義:
ObjectTypePersonis
TypeF<:Food;
…
varlunch:F;
methodeat(food:F);
end;
ObjectTypeVegetarianis
TypeF<:Vegitable;
…
;F:hcnulrav
;)F:doof(taedohtem
;dne
.dooF的吃所nosreP個這供提性屬的hcnul個這。種一哪是體具道知不但,dooF種某吃能他道知,nosreP個一定給,是思意的dooF: 。法方的)tresseD:doof(tae個一現實再後最.hcnul性屬給賦量變的型類tresseD個一用,後然.tresseD=F,說如比,epytbus的dooF個一定選先以可,時象對nosreP建創在 。菜是還肉是的吃他道知不使即,餐午的帶自他吃地全安以可nairatigeV個這,時理處nosreP個一作當nairategeV個一把當。了的全安是nosreP: