【发布时间】:2012-01-27 15:57:22
【问题描述】:
我了解到我们不能实例化抽象类。但是今天我测试了一些代码,我对此感到困惑。
package MainPackage;
abstract class abstractClass {
abstract abstractClass a_function();
}
public class Src {
abstractClass m;
public abstractClass abstractClassTest() {
return m.a_function();
}
public static void main(String args[]) {
System.out.println("Hello world!");
}
}
这里我创建了一个抽象类 abstractClass 并在 abstractClassTest() 函数中返回它。并且编译成功,没有错误! IMO 在返回某些东西之前,计算机应该创建一个该类型的对象。在这里它应该在 return m.function() 之前创建一个 abstractClass 的对象,我无法理解。我认为我们不能实例化一个抽象类意味着我们不能创建一个抽象类的对象或者我们不能新建一个类(例如abstractClass m = new abstractClass() is illegal)。但是从上面的代码看来,我们可以创建一个抽象类的对象。怎么可能实现?对于代码abstractClass m,计算机看到代码会做什么?不能说java已经为代码abstractClass m实例化了抽象类m吗?如果java不实例化类abstractClass,它如何在代码abstract abstractClass a_function();中返回abstractClass的对象?
【问题讨论】:
-
你不是 instantiating 一个抽象类,只是使用它的引用。
-
请注意,您的代码没有实例化任何抽象类对象。如果要创建 abstractclass 的子类,则可以实例化它 (abstractClass m = new childClass(...)),然后 m.a_function 将是有效的。
-
正如您所指出的,您不能“新建”抽象类。您的代码中的任何地方都没有
new- 那么问题出在哪里? -
Bhushan 和 Sam DeHaan,既然您是在回答这个问题,那么您应该将其作为答案,而不是作为评论。
标签: java abstract instantiation