因此,在尝试理解抽象类时,我仍然对一件事感到困惑。您什么时候想声明其抽象类的对象类型。例如
public abstract class GameObject
{
public abstract void draw();
public static void main(String[] args)
{
GameObject player = new Player();
Menu menu = new Menu();
}
}
public class Player extends GameObject
{
override
public void draw()
{
// Something
}
}
public class Menu extends GameObject
{
override
public void draw()
{
// Something
}
}
通常,我只会实例化一个播放器类型的播放器对象。但是,我已经看到抽象类被用作新对象的变量类型。你什么时候会选择这样做?谢谢!
最佳答案
每次您需要将变量作为抽象类的实例时,您都会这样做,但并不真正关心具体类型是什么(并且不希望其余代码采用特定的子类用来)。例如:
GameObject[] gameObjects = new GameObject[] {new Menu(), new Player()};
drawAll(gameObjects);
...
private void drawAll(GameObject[] gameObjects) {
for (GameObject gameObject : gameObjects) {
gameObject.draw();
}
}
抽象类型通常用作返回类型(因为您不希望调用者知道返回的具体类型:它可能会在以后更改,或者可能会根据配置的参数而变化)。
它也常被用作方法的参数类型,使方法可以接受抽象类型的任何子类的参数,并以多态方式使用它。
当然,作为数组/集合类型,能够将多个子类的实例存储在一个唯一的集合中。
关于java - 何时使用抽象类作为类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33457393/