我有一个名为Image
的类和一个名为ImageSheet
的类。
ImageSheet
与Image
相同,但它有其他字段,例如图片上的帧数。
我想要做的就是拥有它,以便我可以致电drawImage(img, frame)
并让img
成为Image
或ImageSheet
,并使用相同的方法处理它们唯一的区别是,如果它是Image
,那么frame
字段将被忽略,但当它为ImageSheet
时,frame
字段将被读取并用于绘制特定帧。< / p>
我试图避免使用单独的方法,如果它是Image
或ImageSheet
,因为我已经有3种不同的drawImage()
方法接受不同的输入变量,如果我做了一个对于每个类,我有3对方法,其中每对基本上完全相同。
我怎样才能理解我的想法?
答案 0 :(得分:1)
为什么不让Image
/ ImageSheet
类自己处理帧处理?
例如,让Image
类有一个名为process(frame)的方法,然后忽略发送的frame参数,让ImageSheet
覆盖你想要的任何处理的进程(frame)方法要做的ImageSheet
特定对象。
然后,您可以:
void drawImage(Image img, Frame frame) { img.process(frame); }
它将根据它是Image
还是ImageSheet
来做适当的事情。希望我能正确理解你的问题!
编辑:
澄清一下,分别是Image
和ImageSheet
类的代码。
class Image {
...
public void process(Frame frame) {
// do something
}
}
class ImageSheet extends Image{
...
// override process(Frame frame) method from Image
public void process(Frame frame) {
// do something different
}
}
答案 1 :(得分:1)
由于ImageSheet扩展了图像,因此drawImage(img, frame)
方法上的签名应为drawImage(Image img, Frame frame)
。要区分Image
和ImageSheet
个对象,请使用instanceOf
运算符。
例如:
public void drawImage(Image img, Frame frame) {
if(img instanceof ImageSheet) {
// handle ImageSheet
} else {
// handle all other Image instances
}
}
答案 2 :(得分:0)
我假设drawImage是Image / ImageSheet之外的方法,如果你想避免使用单独的方法,你可以使用instanceof并检查img参数是否是imageSheet的一个实例。
答案 3 :(得分:0)
据我了解,drawImage(...)
方法在Image
和ImageSheet
之外。在这种情况下,有许多潜在的解决方案:
Image
所有效果都是ImageSheet
,具有固定数量的帧(1);因此,您不必关心Image
与众不同; drawImage(frame)
(以及可能的其他变体,我已经从您的文字中理解)每个子类中都存在类和类;这类似于Image
模式。Visitor
使用方法Image
自行渲染,您可以在其中放置正在执行渲染的所有可能的功能请求。