【问题标题】:What is Implicit constructors on Java什么是 Java 上的隐式构造函数
【发布时间】:2012-04-22 04:46:34
【问题描述】:

Java 中是否必须调用基类构造函数? 在 C++ 中它是可选的,所以我问这个。

当我扩展 ArrayAdapter 时,我收到此错误:"Implicit super constructor ArrayAdapter<String>() is undefined. Must explicitly invoke another constructor"

那么,调用基类构造函数的目的是什么?当我创建对象基类的构造函数时会调用 & 然后就派生了。

【问题讨论】:

  • 您可能没有 rayAdapter() 构造函数。如果在基类中添加默认构造函数,应该没问题。
  • 那么,它是不是类似于 DerivedClass(int x, int y): BaseClass(y), in c++???。对??又多了一个疑问,在上述机制中,基类构造函数类是两次还是一次?

标签: java c++


【解决方案1】:

如果您自己不调用无参数构造函数,则会隐式调用该构造函数,如果该构造函数不存在,则该构造函数无效。需要调用超构造函数的原因是超类通常具有一些在构造后期望处于的状态,其中可能包括无法在子类中设置的私有变量。如果你不调用构造函数,它会使对象处于可能无效的状态,这可能会导致各种问题。

【讨论】:

  • 那么,它是不是像 DerivedClass(int x, int y): BaseClass(y), in c++???。对??又多了一个疑问,在上述机制中,基类构造函数类是两次还是一次?
  • 是的,没错。 Java只允许你在一个构造函数中调用一个构造函数,要么是基类,要么是转发到当前类中的另一个构造函数,所以基类构造函数只能被调用一次。
【解决方案2】:

不需要调用超类的无参数构造函数。如果你想用 args 调用构造函数,用户 super 关键字如下所示:

super(arg1, ...);

【讨论】:

  • “不需要调用超类的无参数构造函数”,但是Java会插入调用吗?
  • @AndrewMcKinlay 是的,除非用户代码以this(...) 开头。
猜你喜欢
  • 2018-08-03
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 2023-03-17
相关资源
最近更新 更多