Java继承:每次子类扩展它时,是否实例化父类?

时间:2017-05-05 13:28:42

标签: java android android-fragments inheritance

我想为项目中的所有片段提供基本功能。

父片段( FragmentP )本身扩展了android {{1}}类。在这里,我将为所有扩展它的片段提供一个通用功能。

现在我的问题是:

  1. FragmentP 的片段生命周期与其所有孩子有何不同?
  2. 什么时候 FragmentP 被创建并销毁?是否在创建(实例化)任何子项时重新创建(重新实例化)?

3 个答案:

答案 0 :(得分:1)

不,它与实例化无关。继承的概念是你扩展预先存在的类的功能,在这种情况下,它是FragmentP扩展方法,字段等。

它仍然是Fragment,具有来自android的通常生命周期。

答案 1 :(得分:1)

当你扩展课程时,你唯一能做的就是专攻父母的功能。

现在,如果在子构造函数中调用super();,它就不会实例化父对象。相反,它在运行子类构造函数中的代码之前运行父构造函数。 当您的子类需要在实例化时执行相同的行为时,通常会使用此方法。

编辑:

假设您有一个超级班Vehicle和两个孩子CarQuad。 这两种车辆都有4个车轮。因此,您的超级构造函数可以将wheel字段初始化为 4 的值。

但两个孩子都有分歧: 例如,当Car没有时,Quad有窗口。 因此,您的Car构造函数应该初始化一个窗口字段,并且您的Quad构造函数不应该。

答案 2 :(得分:1)

1)实例化一个类时,没有实例化父类,尽管你必须调用父类的构造函数:

public childClass(){
   super();
}

但只有一个实例存在,即childClass,内存中不会出现parentClass的实例。因此,对于任何类,生命周期都是相同的,继承是静态过程,而不是动态过程。这意味着它发生在编译期间,而不是在执行期间。

2)FragmentP仅在您明确决定这样做时实例化,具体取决于您选择的实例化策略(工厂,构造函数,构建器等)。当没有对实例的剩余实时引用时,它被销毁(实际上由垃圾收集器收集)。