什么时候覆盖时不调用super()方法?

什么时候覆盖时不调用super()方法?,第1张

什么时候覆盖时不调用super()方法

通过调用

super
方法,您不会 覆盖 方法的行为,而是在 扩展 它。

调用

super
将执行您要扩展的类为该方法定义的任何逻辑。考虑到
super
在方法覆盖中调用的实现的那一刻可能很重要。例如:

public class A {     public void save() {          // Perform save logic    }}public class B extends A {    private Object b;    @Override    public void save() {         super.save(); // Performs the save logic for A        save(b); // Perform additional save logic    }}

的调用

B.save()
将执行
save()
逻辑两个
A
B
,在该特定的顺序。如果您未
super.save()
在内部呼叫
B.save()
,则
A.save()
不会被呼叫。如果你叫
super.save()
save(b)
A.save()
将有效地执行之后
B.save()

如果您想 覆盖

super
的行为(也就是说,完全忽略其实现并自行提供),则不应调用
super

SAXParser
您提供的示例中,这些方法的实现
DefaultHandler
只是空的,因此子类可以覆盖它们并提供这些方法的行为。在此方法的javadoc中也指出了这一点。

public void startElement (String uri, String localName,    String qName, Attributes attributes) throws SAXException {    // no op}

super()
正如
@barsju
他的评论所指出的那样,关于IDE生成的代码中的默认调用,在每个构造函数中都有一个隐式调用
super()
(即使您没有在代码中编写它),在这种情况下,这意味着对
super
‘的默认构造函数。在
IDE
刚刚记下来给你,但它也将得到,如果你删除它叫。还要注意,在实现构造函数
super()
或其带参数的任何变体(即
super(x,y,z)
)时,只能在方法的
开始处 进行调用。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5488656.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-12

发表评论

登录后才能评论

评论列表(0条)

    保存