我对书中的类图有一个问题"设计模式:可重复使用的面向对象软件的元素"四国集团。
在此图中,有一个名为Graphic的抽象类,带有一些抽象方法(Draw,Add等)。还有一个名为Picture的子类重载了Graphic类的抽象方法。我完全理解这一点。
我的问题是,在其他子类(Line,Rectangle和Text)中,没有提到覆盖Graphic类的抽象方法。为简单起见,它只是被忽略了?如果他们被忽略了,我知道没有必要让"添加","删除"和" getChild" Line,Rectangle或Text类中的方法。显而易见的是我不明白的事情。
我知道这本书使用了c ++和Smalltalk中的例子,也许在其中一种语言中,抽象方法不像Java一样(子类必须覆盖父抽象方法。)。
感谢您的帮助。
答案 0 :(得分:2)
不需要在Java的子类中重写抽象方法;这样的子类再次被认为是抽象的。所以在这个例子中,Line,Rectangle,Text是抽象的子类。
答案 1 :(得分:1)
我也觉得它因某些原因被忽略或者是错误的。因为如果Line,Rectangle和Texts是抽象类,则类名应该用斜体表示,如Graphic。由于其原因,他们可能省略了这些类的Add,Remove和GetChild操作。
答案 2 :(得分:0)
我在书后面的很多页面找到了答案。他们提供了两种实现UML所指的复合模式的方法。
在所有叶子类中添加方法add,remove,getChild(Line, 矩形和文本),并使它们什么都不做或抛出异常if 它们被使用(例如,如果您想将子项添加到Text,则禁止使用它。)
从Graphic中删除抽象方法add,remove,getChild class,并保留Picture类(复合)中的具体方法。
我个人认为第二个是要走的路。这样做的方式更简单,不会造成混淆。
感谢您的回复