使用super调用超类构造函数还是直接使用setTitle?

7
在扩展javax.swing.JFrame时,使用setTitle("Title")super("Title")来设置标题,哪种方法更推荐?从性能的角度考虑,哪一种方法更好?

1
不要扩展JFrame,只需使用一个实例即可。但无论如何,最好在构造函数中传递标题,因为这样可以减少创建/配置实例的代码行数。另请参见何时进行优化 - Andrew Thompson
5
"performance"? 你想创建多少个JFrame?每秒钟数百万个吗? - Andreas Dolk
3个回答

5
如果你在OpenJDK 6-b14中查找JFrame,并进行一些挖掘,你会发现构造函数JFrame()调用构造函数Frame(),而构造函数Frame()又调用Frame("")链接)。
因此,既然隐式的super()会在没有明确指定任何超级构造函数的情况下添加,那么调用super("Title")会更加有效(虽然只是稍微有效一些)。

1
如果你在构造函数中,尽可能将功能委托给超级构造函数。这样可以避免重复工作。
例如,默认的超级构造函数可能会创建一些内部对象,在调用setter时会被覆盖。如果立即传递正确的数据,可以使其更加高效。
但我认为在这种特定情况下,这并不重要。

0

在扩展类时,始终调用相应的super(.....)是一个好习惯。因为你永远不知道超级构造函数在幕后做了什么魔法。

你永远不需要只调用

call super();

如果你没有指定其他内容,那么这就是默认值。你只需要指定要调用的构造函数,如果:

  • 您想调用具有参数的超类构造函数
  • 您想链接到同一类中的另一个构造函数而不是超类构造函数

你的意思是在扩展一个类时要显式调用 super 吗?如果是这样,为什么?因为当你显式或隐式地扩展一个类时,你确实会调用 super - emory

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接