我无法理解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
}
Run Code Online (Sandbox Code Playgroud)
这按预期工作.但是现在我有一个"主循环"来绘制所有这些不同的对象,因此我想简单地调用这些类的方法而不询问列表中下一个对象的类型.
对我来说,这意味着我需要某种类型的头类,其中包含myMovie或myImage.就像是:
class AnimationObject
{
var child;
...
}
Run Code Online (Sandbox Code Playgroud)
然后在主循环中调用
AnimationObject[] ani_list;
foreach(AnimationObject ani in ani_list)
{
ani.draw();
}
Run Code Online (Sandbox Code Playgroud)
当然问题是Java不知道像"var"这样的东西.我可以使用Object,但是我必须总是在主循环中转换对象的类型.
哪个是解决这个问题的正确方法?与我的确切问题相比,我无法理解所有那些接口,抽象类等.这是首选和正确的方法吗?}
使用接口:
public interface AnimationObject {
void draw();
}
public class myImage extends PImage implements AnimationObject {
[...]
}
public class myMovie extends Movie implements AnimationObject {
[...]
}
Run Code Online (Sandbox Code Playgroud)
在你的主循环中使用界面:
AnimationObject[] ani_list;
foreach(AnimationObject ani : ani_list) {
ani.draw();
}
Run Code Online (Sandbox Code Playgroud)