2015-10-31 147 views
2

我不知道如果我问这个正确的,但我在分配给一个子类可以创建抽象类型超类的对象吗?

ClassA的是抽象的

ClassB的延伸A类

然后在ClassB的主要方法有:

ClassA obj = new ClassB();

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

+1

_you_认为发生了什么? –

+0

我明白,如果一个孩子继承超级,那么可以创建一个超级/孩子的对象。但我很困惑,因为我知道我们不能创建抽象的对象 –

+3

您并没有创建抽象类的对象。您正在创建'ClassB'的对象并*将它分配给'ClassA'类型的引用。 – Pshemo

回答

3

您永远无法创建来自抽象类的对象。永远。期。

这里你的变量被赋值的对象是抽象类型,但变量引用的对象本身不是并且永远不会。参考变量和参考变量之间的区别是一个必须理解的关键概念,但一旦你得到它,你就会变成“a-ha!”。

1

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

2

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

超类项目是抽象的 在这个Item类中,我们有项目的纹理/ ID /名称等变量。然后,我们制作Item超类的子类,这些将是其更具体区域中的所有物品(例如武器,货币,食物等)。当然,在他们的课堂上,他们将获得帮助他们脱颖而出的细节。

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

+0

谢谢。我可以说obj属于内存中的ClassA吗? –

相关问题