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

访问不可覆盖的超类方法时使用“ super”关键字

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

访问不可覆盖的超类方法时使用“ super”关键字

不要使用

super
关键字来引用其他未被覆盖的方法。这会使其他尝试扩展您的类的开发人员感到困惑。

让我们看一些 确实

super
以这种方式使用关键字的代码。在这里,我们有2类:
Dog
CleverDog

public static class Dog extends Animal {    private String name;    public Dog(String name) {        this.name = name;    }    public String getName() {        return name;    }}public class CleverDog extends Dog {    public CleverDog(String name) {         super(name);    }    public void rollover() {        System.out.println(super.getName()+" rolls over!");    }    public void speak() {        System.out.println(super.getName() + " speaks!");    }}

现在,假设您是该项目的新开发人员,对于在电视上播放的聪明狗,您需要采取一些特定的行为:该狗必须尽其所能,但应以其虚构的电视名称命名。为此,您可以重写

getName(...)
方法…

public class DogonTv extends CleverDog {    String fictionalName;    public DogonTv(String realName, String fictionalName) {        super(realName);        fictionalName = fictionalName;    }    public String getName() {        return fictionalName;    }}

…并陷入原始开发人员及其对

super
关键字的不寻常使用所设置的陷阱!

上面的代码不起作用-
因为在原始

CleverDog
实现中,
getName()
是使用
super
关键字调用的。这意味着它总是调用
Dog.getName()
-与任何覆盖无关。因此,当您使用新
DogOnTv
类型时…

    System.out.println("Showcasing the Clever Dog!");    CleverDog showDog = new CleverDog("TugBoat");    showDog.rollover();    showDog.speak();    System.out.println("And now the Dog on TV!");    DogonTv dogonTv = new DogonTv("Pal", "Lassie");    dogOnTv.rollover();

…您得到错误的输出:

Showcasing the Clever Dog!Tugboat rolls over!Tugboat speaks!And now the Dog on TV!Pal rolls over!Pal speaks!

覆盖方法时,这不是通常的预期行为,因此应避免使用

super
不属于该方法的关键字造成这种混淆。

但是,如果这实际上是您想要的行为,请改用

final
关键字-清楚地表明该方法不能被覆盖:

public class CleverDog extends Dog {    public CleverDog(String name) {         super(name);    }    public final String getName() { // final so it can't be overridden        return super.getName();    }    public void rollover() {        System.out.println(this.getName()+" rolls over!"); // no `super` keyword    }    public void speak() {        System.out.println(this.getName() + " speaks!"); // no `super` keyword    }}


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

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

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