【发布时间】:2013-01-10 06:39:23
【问题描述】:
我有一些测试代码,这是一个继承AbstractClassForInterface1 的ConcreteClass。
在为ConcreteClass的构造函数生成的smali代码中:
# direct methods
.method public constructor <init>()V
.locals 0
.prologue
.line 4
invoke-direct {p0}, Lorg/ucomb/AbstractClassForInterface1;-><init>()V
return-void
.end method
p0实际上是ConcreteClass类型的实例化对象,因为它来自实例化:
new-instance v0, Lorg/ucomb/ConcreteClass1;
invoke-direct {v0}, Lorg/ucomb/ConcreteClass1;-><init>()V
而且很容易理解,对象v0有方法Lorg/ucomb/ConcreteClass1;-><init>()V,
那么在正文中,为什么要像这样在p0 上使用invoke-direct 来调用超类的构造函数:
invoke-direct {p0}, Lorg/ucomb/AbstractClassForInterface1;-><init>()V
?
invoke-direct 不应该调用没有虚拟方法解析的方法吗?
【问题讨论】: