我无法解决java中的以下OOP问题:
我有两个类扩展了一些基本的库类。
class myMovie extends Movie
{
int posi_x;
int posi_y;
...
myMovie(PApplet parent, String filename, int pposi_x, int pposi_y, float pangle, String player)
{
super(parent, filename);
...
}
int getFadeVal()
{
...
}
void fadeOut(int pms)
{
...
}
void fadeIn(int pms)
{
...
}
void exit()
{
...
}
}
class myImage extends PImage
{
// Will get a somehow similar implementation
}
这按预期工作。但是现在我有一个"主循环"来绘制所有这些不同的对象,因此我想简单地调用这些类的方法,而不询问列表中的下一个对象是哪种类型。
对我来说,这意味着我需要某种类型的头类,其中包含myMovie或myImage。像这样:
class AnimationObject
{
var child;
...
}
然后在主循环中只是调用
AnimationObject[] ani_list;
foreach(AnimationObject ani in ani_list)
{
ani.draw();
}
当然,问题是Java不知道"var"之类的东西。我可以使用 Object,但是我必须始终在主循环中强制转换对象的类型。
解决这个问题的正确方法是什么?与我的确切问题相比,我无法真正理解所有这些接口、抽象类等。哪种方法最好且正确? }
为此使用接口:
public interface AnimationObject {
void draw();
}
public class myImage extends PImage implements AnimationObject {
[...]
}
public class myMovie extends Movie implements AnimationObject {
[...]
}
在您的主循环中使用接口:
AnimationObject[] ani_list;
foreach(AnimationObject ani : ani_list) {
ani.draw();
}