- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
据我了解,this
可以在类内部使用来调用其任何父类(super class)中可用的方法,因为编译器将在其父类(super class)中查找该方法如果不是在(子)类中可用。基本上就像使用super
一样。
所以我想知道,哪种处理方式更好?唱歌也有一般的经验法则吗?
问题:
当相关方法未编码时,即只能通过(子)类中的父类(super class)继承来使用,它们基本上做同样的事情,对吧?在这种情况中,是否有理由选择其中一个而不是另一个?
super.methodAvailableInSuper();
或
this.methodAvailableInSuper();
更多说明
为什么要使用this.
?
在这种情况下似乎有两类人:讨厌使用this
的人和喜欢它的人。我显然不是专家,这些只是他们(推荐使用它的人)使用的论点:
当您使用 this.
完成消息时,您确定您打算将其发送至 this.
。不使用 this.
可能意味着您可能忘记写下您想要将消息发送到的目标。它与变量一起使用,以消除局部变量与实例变量的歧义
**this
、super
或者都不是? **
如果您不喜欢使用 this
,“都不是”显然不是您的答案,因为编译器不会要求您提供它。
如果您认为使用this
有一定意义,那么在问题的上下文中,每个约定都有其好处:
super
确保子类中的重写不会影响消息发送,但如果您希望代码反射(reflect)通过重写所做的任何更改,您需要 this
。
我希望程序员在经过这个思考过程后已经做出了默认/更好的选择,这就是我所要求的。
最佳答案
它们并不等同,所以你的问题没有意义。
您应该使用能够完全满足您需求的任何一个。这不仅仅是一个审美选择,或者一个“良好实践”的问题。
编辑重新编辑编辑:
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/
问题比较Java,但是我想在Android中实现: 假设有 3 个或更多类相互扩展: class A { ... int color; ... } class B extend
我知道标题听起来有点奇怪,但这正是我愿意做的。简单解释:A类是B类的子类,B类也是C类的子类>. 现在,所有这些类都包含方法m()。在我的 A 类中,这是我唯一可以访问的类,因为其他类仅在运行时可用,
我有一个 UIViewController 类 A 和 B。 A 使用以下方式加载 B:[A.view addSubView B.view]。 B 有一个带有“后退”按钮的导航栏。我想在单击时返回到
我有以下(第三方)类结构。我们将调用第三方项目 ProjectSeriously,并注意我使用 System.out.println 代替其他复杂的功能(100 行代码) . class A {
在下面的代码中,我从 Game 扩展了 MyGame。我有两个问题: 我们是否需要为所有render()、dispose()、pause()调用super方法 和 resize(w,h)?很多人都没有
例如,假设我想在调用 super.viewDidLoad() 时跳过一级。所以我希望能够做这样的事情: override func viewDidLoad() { super.super.vi
public class Faculty extends Employee { public static void main(String[] args) { new Fac
假设我有: class Superclass { //fields... methodA() {...} methodB() {...} ... } class Subclass exte
这个问题在这里已经有了答案: Why is super.super.method(); not allowed in Java? (22 个答案) 关闭 9 年前。 我怀疑我想做的事情是否可行。我有
我有一个实现 Initializable 的类。 public abstract class ExampleClass implements Initializable { public vo
我想知道,我有这个大数组,是否可以只在内存中使用一次而不是每个线程一次?以 stackoverflow 上的标签为例。他们几乎从不改变,为什么不为他们留下一个内存点呢?甚至可能将该数组永久保存在内存中
假设这三个类具有这个简单的层次结构: class A { func foo() { print("A") } } class B: A { override fu
有没有办法在 TypeScript 中调用 super.super.methodName。我想避免调用super.methodName,但我想调用二祖的methodName方法。 谢谢。 最佳答案 T
这个问题已经有答案了: When do I use super()? (11 个回答) 已关闭 7 年前。 package Geometry; public abstract class Geomet
我必须执行and()在我的实现 Predicate 的业务对象上. 出现问题的代码是 and() 行调用: Predicate predicate = new M
我有一个实现接口(interface)的抽象父类(super class): public abstract class FooMatrix implements Matrix { publi
我有四个 UIView:viewA 是 Root View ,它有 viewB 作为它的 subview 。 viewB 将 viewC 作为其 subview ,而 viewC 将 viewD 作为
有什么区别: class Child(SomeBaseClass): def __init__(self): super(Child, self).__init__() 和:
我有一个通用接口(interface) interface ListList extends List> .由于某些原因,我无法转换 ListList至 List> .有什么方法可以做到吗?为什么它不
我想调用带有两个参数的父类(super class)的构造函数,所以我调用了 super(arguments),但是编译器说: “类 Person 中的构造函数 Person 不能应用于给定类型; 要
我是一名优秀的程序员,十分优秀!