据我所知,this
可以在类中使用,以调用其任何超类中可用的方法,因为编译器将在其超类中查找该方法,如果它在(亚)类的即可。基本上就像使用super
一样。
所以我想知道,这是更好的做事方式吗?唱歌是否有一般的经验法则?
问题:
如果所讨论的方法没有被编码,即只能通过(超级)类中的继承获得)(子)类,它们基本上做同样的事情吗?在那个的情况下,是否有理由选择一个而不是另一个?
super.methodAvailableInSuper();
或
this.methodAvailableInSuper();
更多澄清
为什么全部使用this.
在这种情况下似乎有两组人:讨厌使用this
的人和喜欢它的人。我显然不是专家,这些只是争论他们(推荐使用它的人)使用:
使用this.
填写邮件时,您确定要将其发送至this.
。不使用this.
可能意味着可能忘记编写您要发送消息的内容。它与变量一起用于消除实例vairables
** this
,super
或者不是吗? **
如果您不喜欢使用this
,那么“不”是您明显的答案,因为编译器不会要求您使用它。
如果您认为使用this
作为惯例,在问题的背景下,每个都有其好处:
super
确保子类中的覆盖不会影响消息发送,但如果您希望代码反映通过覆盖进行的任何更改,则需要this
。
我希望程序员在完成这个思考过程之后已经做出了默认/更好的选择,这就是我要求的。
答案 0 :(得分:5)
他们并不等同,所以你的问题没有意义。
你应该使用你想要的任何一个。它不仅仅是一种美学选择,也不是一种良好实践的问题。
编辑重新编辑您的编辑内容:
当有问题的方法在基类中不可用时,它们基本上做同样的事情吗?
错误。 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
** this
,super
或者不是吗? **
如果您不喜欢使用this
,那么“不”是您明显的答案,因为编译器不会要求您使用它。
如果您认为使用this
作为惯例,在问题的背景下,每个都有其好处:
super
确保子类中的覆盖不会影响消息发送,但如果您希望代码反映通过覆盖进行的任何更改,则需要this
。
我希望程序员在完成这个思考过程之后已经做出了默认/更好的选择,这就是我要求的。