默认构造函数在父类(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/