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
ConcreteClass
これはインスタンス化からのものであるため、実際にはタイプのインスタンス化されたオブジェクトです。
new-instance v0, Lorg/ucomb/ConcreteClass1;
invoke-direct {v0}, Lorg/ucomb/ConcreteClass1;-><init>()V
v0
オブジェクトにメソッドがあることは簡単に理解できますLorg/ucomb/ConcreteClass1;-><init>()V
。
次に、本文で、を使用invoke-direct
しp0
てスーパークラスのコンストラクターを次のように呼び出す理由を説明します。
invoke-direct {p0}, Lorg/ucomb/AbstractClassForInterface1;-><init>()V
?
invoke-direct
仮想メソッド解決なしでメソッドを呼び出すことになっているのではありませんか?