子类可以创建抽象类型超类的对象吗?

时间:2015-10-31 03:30:20

标签: java polymorphism abstract-class

我不确定我是否正确地问过这个问题,但是我已经在作业中给出了

ClassA是抽象的

ClassB扩展了A类

然后在ClassB的主要方法中我们有:

ClassA obj = new ClassB();

这里发生了什么,这样做的目的是什么?

3 个答案:

答案 0 :(得分:3)

您永远不能创建来自抽象类的对象。永远。期。

在这里,被赋予对象的变量是抽象类型,但变量引用的对象本身不是,也永远不可能。参考变量和参考变量之间的区别是一个必须被理解为推进的关键概念,但是一旦你得到它,你就会去#a; ha!"。

答案 1 :(得分:2)

这确实是多态性的主要部分。首先,是的,您编写的代码正是如何发生的。我认为最简单的理解方法(无论如何)是看游戏的行为方式。

超类物品是抽象的 在这个Item类中,我们有项目的纹理/ ids /名称等的变量。

然后我们制作Item超类的子类,这些类将是更具体区域中的所有项目(例如,武器,货币,食物等)。当然,在他们的课程中,他们会提供有助于使他们脱颖而出的细节。

最后。为什么?好吧,如果你必须加载所有这些项目,那么单独指定所有不同的孩子将是一种绝对的痛苦。例如,您可以将所有子类放入数组,列表或映射中。所有这些都在Item类名下。这样,超类的所有子类都可以放入一个容器中,以便一次轻松操作所有子类。

答案 2 :(得分:1)

是的,这完全有可能。所以抽象类就像合同。您将在Abstract类中仅提供方法声明。儿童类有责任提供定义。因此,B类将负责定义A类声明的任何方法的行为。如果我们想在子类中强制执行默认行为,我们会这样做。阅读文档以获取更多详细信息和示例。