Java - “超级”,“这个”或两者兼而有之 - 良好实践

时间:2014-04-23 00:42:27

标签: java

据我所知,this可以在类中使用,以调用其任何超类中可用的方法,因为编译器将在其超类中查找该方法,如果它在(亚)类的即可。基本上就像使用super一样。

所以我想知道,这是更好的做事方式吗?唱歌是否有一般的经验法则?

问题

如果所讨论的方法没有被编码,即只能通过(超级)类中的继承获得)(子)类,它们基​​本上做同样的事情吗?在那个的情况下,是否有理由选择一个而不是另一个?

super.methodAvailableInSuper();

this.methodAvailableInSuper();

更多澄清

为什么全部使用this.

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

使用this.填写邮件时,您确定要将其发送至this.。不使用this.可能意味着可能忘记编写您要发送消息的内容。它与变量一起用于消除实例vairables

中的局部变量的歧义

** thissuper或者不是吗? **

如果您不喜欢使用this,那么“不”是您明显的答案,因为编译器不会要求您使用它。

如果您认为使用this作为惯例,在问题的背景下,每个都有其好处:

super确保子类中的覆盖不会影响消息发送,但如果您希望代码反映通过覆盖进行的任何更改,则需要this

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

3 个答案:

答案 0 :(得分:5)

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

  • this.method()将调用method()的派生程度最高的覆盖,包括在此对象可能是
  • 的实例的任何派生类中
  • super.method()将调用基类的method()实现,或者如果它本身没有提供实现,则调用它继承的任何实现。

你应该使用你想要的任何一个。它不仅仅是一种美学选择,也不是一种良好实践的问题。

编辑重新编辑您的编辑内容:

  

当有问题的方法在基类中不可用时,它们基本上做同样的事情吗?

错误。 super始终在基类或其父类之一中调用方法。 this调用派生最多的覆盖。如果你肯定不想在未来的任何派生类中调用任何未来的实现,你会写super,如果你想调用这样的实现,你会写this,或者什么也不写如果在进行呼叫时存在。编码时你不知道哪些东西。

答案 1 :(得分:1)

这不是"最佳实践"因为这些关键词非常不同。

当您调用super.methodAvailableInSuper();时,将在运行时搜索所有父类的此方法。如果此方法存在于当前类或任何子类中,则不会执行此方法。

如果你想调用覆盖方法的超级实现而不需要无限循环,你可以使用它。

关键字this调用当前对象的方法。因此,将执行方法的正常执行。

另见:

http://docs.oracle.com/javase/tutorial/java/IandI/super.html

答案 2 :(得分:0)

为什么全部使用this.

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

使用this.填写邮件时,您确定要将其发送至this.。不使用this.可能意味着可能忘记编写您要发送消息的内容。它与变量一起用于消除实例vairables

中的局部变量的歧义

** thissuper或者不是吗? **

如果您不喜欢使用this,那么“不”是您明显的答案,因为编译器不会要求您使用它。

如果您认为使用this作为惯例,在问题的背景下,每个都有其好处:

super确保子类中的覆盖不会影响消息发送,但如果您希望代码反映通过覆盖进行的任何更改,则需要this

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