【发布时间】:2014-05-08 03:13:48
【问题描述】:
我正在尝试基于 .smali 文件生成调用图。但是,我遇到了一个令人困惑的情况如下:
.super Landroid/graphics/drawable/Drawable;
.source "SBarExp.java"
.method public final setBounds(Landroid/graphics/Rect;)V
.line 514
iget-object v2, p0, Lcom/sds/android/ttpod/app/modules/skin/view/SeekBarExpansion$a;->b:Landroid/graphics/drawable/Drawable;
invoke-virtual {v2, p1, v0, p3, v1}, Landroid/graphics/drawable/Drawable;->setBounds(IIII)V
.line 515
invoke-super {p0, p1, v0, p3, v1}, Landroid/graphics/drawable/Drawable;->setBounds(IIII)V
.end method
根据我的理解,“invoke-super”只是意味着它将调用一个父方法,所以“invoke-super {p0, p1, v0, p3, v1}, Landroid/graphics/drawable/Drawable;- >setBounds(IIII)V" 可以解释为 “Landroid/graphics/drawable/Drawable;->setBounds(IIII)V”?
如果是,我想知道“invoke-virtual {v2, p1, v0, p3, v1}, Landroid/graphics/drawable/Drawable;->setBounds(IIII)V”是否与“invoke -super {p0, p1, v0, p3, v1}, Landroid/graphics/drawable/Drawable;->setBounds(IIII)V"?
如果不是,有什么区别?如果是,为什么两次调用相同的方法(使用不同的方式)?
请帮忙,非常感谢!
【问题讨论】:
-
您正在查看面向对象设计模式的底层实现,其中第一个参数通常指定主题对象,因此除其他外,我相信第一个参数的不同意味着第一个调用作用于不同的对象(可能保存在实例字段中),而第二个调用作用于自身。
-
嗨,克里斯,感谢您的及时回复。那么,我可以这样理解吗:两个“调用”都在调用相同的方法(相同的类),只要它们传递不同的对象作为参数?