java - 为什么我在 Android 中需要 super() ?

标签 java android

从 Activity 中我将数​​据传递到:

public FoodAdapter(BaseActivity activity, int ResoruceId, ArrayList <food> cake) {


}

但是这给了我一个错误。为了解决这个问题,我需要 super() ,其中包含 Activity、ResoruceId 和 cake。为什么我需要这个 super() 以及它有什么作用?

谢谢

最佳答案

它初始化您扩展的父类(super class)。您需要这样做,因为父类(super class)必须在构造函数中的任何其他代码运行之前初始化,因为允许子类访问其父类(super class)的状态,并且父类(super class)必须有机会设置该状态状态。一般来说,正如您的类有机会进行初始化(在构造函数中)一样,父类(super class)也需要有机会进行初始化。

如果父类(super class)仅定义带参数的构造函数,则必须显式调用父类(super class)构造函数(使用 super),并传入这些参数。因此,如果它需要 Activity 和资源 ID,则:

super(activity, ResoruceId); // I would change that second name!

如果父类(super class)定义了一个没有参数的构造函数,并且您没有在构造函数中调用 super(...),则 Java 编译器将为您调用无参数版本插入一个(例如,它在构造函数的顶部插入 super(); )。但如果父类(super class)没有定义零参数构造函数,它就无法做到这一点。

我建议阅读 Java 继承的基础知识。甲骨文有an inheritance tutorial ,包括this bit关于使用 super

关于java - 为什么我在 Android 中需要 super() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28658277/

相关文章:

java - "The default initialization of any object happens-before any other actions (other than default- writes) of a program"是什么意思?

android - 在“开始捕获”对话框中检测按键

java - 以编程方式接听电话

android - AdMob 广告在 ListView 中需要点击两次才能激活?

java - 获取目录中文件的最后修改日期

android - 无法在 android (Android studio) 中测试 protected 方法

java - 将以毫秒为单位的时间戳转换为以秒为单位的时间戳

java - 列表<?> 或列表<对象>

java - 谷歌浏览器 Java 解决方法

java - Java 中的带符号字节,有什么好主意?