我正在浏览Android恶意软件中的一段代码,以了解它的工作原理。 av类定义如下
public final class av implements android.widget.AdapterView.OnItemClickListener {
final ChooserActivity a;
public av(ChooserActivity chooseractivity) {
super();
a = chooseractivity;
}
...Other methods here
}
super()调用直接父类构造函数 - >这我知道
父类是Object。所以构造函数将返回什么。意味着返回对象的属性是什么。?
答案 0 :(得分:5)
super()
必须位于subclass constructor
内的第一个语句中,它会调用parent constructor
public av(ChooserActivity chooseractivity)
{
super();
a = chooseractivity;
}
答案 1 :(得分:3)
它什么都不做。
这是对父构造函数的调用,ac
的父构造函数是Object
。
Object
是您的对象扩展的默认类,它的构造函数什么都不做。 (它实际上没有一个)
此外,您必须将super()
作为构造函数的第一行,按照惯例,您应该使用大写字符命名您的类。
public final class Av implements android.widget.AdapterView.OnItemClickListener {
final ChooserActivity a;
public Av(ChooserActivity chooseractivity) {
super();
this.a = chooseractivity;
}
}
但是因为你要扩展的课程是Object
,所以你实际上不需要打电话给超级。
public final class Av implements android.widget.AdapterView.OnItemClickListener {
final ChooserActivity a;
public Av(ChooserActivity chooseractivity) {
this.a = chooseractivity;
}
}
答案 2 :(得分:2)
您列出的代码无效,无法编译。对super()的调用必须是构造函数中的第一个语句。在你继续构建自己之前,它用于构建你正在扩展的对象。
答案 3 :(得分:1)
此代码甚至无法编译。请记住构造函数调用必须是构造函数中的第一个语句。
试试这个:
public av(ChooserActivity chooseractivity) {
// Call the base class constructor. Should be the firs
super();
a = chooseractivity;
}
OR
public av(ChooserActivity chooseractivity) {
// Compiler will give implicit call to the base class contructor
a = chooseractivity;
}
答案 4 :(得分:1)
super()
关键字调用父构造函数,即av
来自的类的构造函数。在这种情况下,您没有明确地给出父类,因此您最终得到了Object
的默认父类。
在这种特殊情况下,super()
将会有什么中断,因为在Java中调用super()不是构造函数方法的第一行是非法的。那是因为在子(更具体)对象之前构造父(更基本)对象没有意义。
有关stackoverflow的super()
的更多内容:
答案 5 :(得分:0)
我猜您的代码出错了。这样做的原因是,无论何时调用baseclass的构造函数,super()
必须是方法中的第一行。如下所示,
public final class av implements android.widget.AdapterView.OnItemClickListener
{
final ChooserActivity a;
public av(ChooserActivity chooseractivity)
{
super(); // must be in first line.
a = chooseractivity;
}
}
但是如果你在这种情况下调用基类的方法,那么super可以在任何行中。
public final class av implements android.widget.AdapterView.OnItemClickListener
{
final ChooserActivity a;
public void Test(ChooserActivity chooseractivity)
{
a = chooseractivity;
super.Test(); // No need to be declare in first line.
}
}
答案 6 :(得分:0)
Super必须是第一个语句,因为它是要调用的超类的正确构造函数。可能有多个,但默认情况下会调用super(),因此不必显式调用它。当你需要传递参数时,你可能需要调用super。
答案 7 :(得分:0)
构造函数调用必须是构造函数中的第一个语句。 所以 super()应该在开头