我有一些测试代码,这是一个ConcreteClass
继承AbstractClassForInterface1
. 在为构造函数生成的 smali 代码中ConcreteClass
:
# 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
实际上是 type 的实例化对象ConcreteClass
,因为它来自实例化:
new-instance v0, Lorg/ucomb/ConcreteClass1;
invoke-direct {v0}, Lorg/ucomb/ConcreteClass1;-><init>()V
并且很容易理解,对象v0
有方法Lorg/ucomb/ConcreteClass1;-><init>()V
,
然后在正文中,为什么要像这样使用invoke-direct
onp0
来调用超类的构造函数:
invoke-direct {p0}, Lorg/ucomb/AbstractClassForInterface1;-><init>()V
?
不invoke-direct
应该在没有虚拟方法解析的情况下调用方法吗?