栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

什么时候覆盖时不调用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)
)时,只能在方法的
开始处 进行调用。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/496535.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号