java - 如果它是父类(super class)没有参数构造函数有空主体,默认构造函数如何用于实例化对象?

标签 java android constructor

默认构造函数在父类(super class)中调用无参数构造函数 reference 最后一个构造函数用于实例化此类中的对象,如何?我的意思是父类(super class)构造函数主体到底做了什么?

示例

public class Child extend Fragment {}

如果我尝试实例化此类 Child

Child a = new Child() ;

编译器在 Fragment 类中调用无参数构造函数。 在 android.app 包中,我发现无参数构造函数没有主体

public Fragment() {}

问题 这个构造函数有什么用?它什么都不做!

附言 我的意思是

这个构造函数有什么用?

虽然它是空的,但它如何实例化它的类,实例化父类(super class)的代码在哪里?

最佳答案

Question how could this constructor be useful ? it do nothing !

无论是否为空,构造函数的目的都是提供类的实例。构造函数主体(如果存在)可以在首次创建实例时进一步执行必要的其他操作。

构造函数本身可能不做任何事情,但它返回一个实例,您可以在该实例上进一步调用类中定义的公共(public)方法。

例如,在您提到的Fragment 类中,假设有一个attach() 方法。如果 attach() 方法是非静态的,您将需要创建一个实例(使用空构造函数)来调用 attach() 方法,无论是否构造函数是否做任何事情。

how does it instantiate its class although it empty

构造函数不需要在其主体中实例化任何代码。 调用 new ClassName()(使用适当的参数,如果有的话)就足够了。在运行时创建对象是 JVM 的工作。您不需要为此在构造函数中编写任何特定代码。如果您愿意,这些额外的代码可以通过设置一些字段或调用方法等来帮助实例从特定状态开始。

where is the code that instantiate super class?

子类(或任何类)中的构造函数仅生成该类的实例。它不需要实例化它的父类(super class)。如果它有一些重要的初始化代码,您可以调用父类(super class)构造函数(使用 super()),但这不是强制性的。此外,子类 don't inherit constructors来自父类(super class)。但它们确实继承了公共(public)和 protected 字段和方法。

关于 Fragment 类,您对它的使用有一些困惑,可以澄清一下 here .

关于java - 如果它是父类(super class)没有参数构造函数有空主体,默认构造函数如何用于实例化对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33302651/

相关文章:

java - 仅加载一次 url

java - 如何添加串口api作为库并在android studio中使用它?

android - 在 google app engine sdk - 1.9.6 中生成客户端库时出错

java - ImageComponent3D 构造函数需要声明整数格式和 BufferedImage[] 数组

java - 回收者 View 混合了其元素的内容

java - 加斯顿和阿尔方斯示例 : How does the bowBack get accessed?

java - 如何在 Eclipse Debug模式下转到函数调用

java - 对资源名称的限制或如何进行通用国际化

c++ - 使用未定义它们的构造函数赋予属性值(Matrix(int,int))

c++ - 编译器看不到参数