gpt4 book ai didi

Java - "super"、 "this"或两者都不是 - 好的实践

转载 作者:行者123 更新时间:2023-12-01 08:03:46 24 4
gpt4 key购买 nike

据我了解,this 可以在类内部使用来调用其任何父类(super class)中可用的方法,因为编译器将在其父类(super class)中查找该方法如果不是在(子)类中可用。基本上就像使用super一样。

所以我想知道,哪种处理方式更好?唱歌也有一般的经验法则吗?

问题:

当相关方法未编码时,即只能通过(子)类中的父类(super class)继承来使用,它们基​​本上做同样的事情,对吧?在这种情况中,是否有理由选择其中一个而不是另一个?

super.methodAvailableInSuper();

this.methodAvailableInSuper();

更多说明

为什么要使用this.

在这种情况下似乎有两类人:讨厌使用this的人和喜欢它的人。我显然不是专家,这些只是他们(推荐使用它的人)使用的论点:

当您使用 this. 完成消息时,您确定您打算将其发送至 this.。不使用 this. 可能意味着您可能忘记写下您想要将消息发送到的目标。它与变量一起使用,以消除局部变量与实例变量的歧义

**thissuper 或者都不是? **

如果您不喜欢使用 this,“都不是”显然不是您的答案,因为编译器不会要求您提供它。

如果您认为使用this有一定意义,那么在问题的上下文中,每个约定都有其好处:

super 确保子类中的重写不会影响消息发送,但如果您希望代码反射(reflect)通过重写所做的任何更改,您需要 this

我希望程序员在经过这个思考过程后已经做出了默认/更好的选择,这就是我所要求的。

最佳答案

它们并不等同,所以你的问题没有意义。

  • this.method() 将调用 method() 的最派生重写,包括此对象可能是其实例的任何派生类
  • super.method() 将调用基类的 method() 实现,或者如果它本身不提供实现,则调用它继承的任何实现。

您应该使用能够完全满足您需求的任何一个。这不仅仅是一个审美选择,或者一个“良好实践”的问题。

编辑重新编辑编辑:

When the method in question is not available in base class, they basically do the same thing right?

错了。 super 始终调用基类或其父类之一中的方法。 this 调用最派生的覆盖。如果您绝对不想在任何 future 的派生类中调用任何 future 的实现,则可以编写 super;如果您确实想要,则可以编写 this,或者什么也不写如果调用时存在这样的实现,则调用该实现。这不是你在编码时可以知道的。

关于Java - "super"、 "this"或两者都不是 - 好的实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23232834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com