我有一个看起来像的对象树
Ball / \ LegalBall IllegalBall
我有两种方法:
class o { AddBall(LegalBall l) AddBall(IllegalBall i) }
在另一个课程中,我想做以下事情:
o.AddBall(myBall);
其中myBall是Ball类型.并根据子类型调用正确的方法.显然我不能这样做......论点不适用.
有谁知道我怎么能达到我想要的目的?或者如果有一个好的工作
谢谢
编辑:我正在尝试构建的应用程序是Cricket记分卡类型的东西.因此,根据击球的类型,各种其他元素应该改变.
我的初衷是能够指定球类型并从某种形式的UI中得分,然后从BallFactory创建一个合适的类型球,然后例如当我向团队得分发送一个无球时,它会将值添加到球队得分,但也增加了无球计数器的价值.但是当我向Batsmens Analysis提供相同的球来处理它时,它应该只能达到击球手总数的值-1.
我希望对我的初衷的解释不是太糟糕.
您可以使用访客模式.
class Basket { void AddBall(LegalBall l) { System.out.println("LegalBall added to basket"); } void AddBall(IllegalBall i) { System.out.println("IllegalBall added to basket"); } } interface Ball { void AddBall(Basket b); } class LegalBall implements Ball { void AddBall(Basket b) { b.AddBall(this); } } class IllegalBall implements Ball { void AddBall(Basket b) { b.AddBall(this); } }
或者使它更通用:
interface BallVisitor { void visit(LegalBall l); void visit(IllegalBall i); } interface Ball { void accept(BallVisitor v); } class LegalBall implements Ball { void accept(BallVisitor v) { v.visit(this); } } class IllegalBall implements Ball { void accept(BallVisitor v) { v.visit(this); } } class Basket implements BallVisitor { void visit(LegalBall l) { System.out.println("LegalBall added to basket"); } void visit(IllegalBall i) { System.out.println("IllegalBall added to basket"); } }