为了账号安全,请及时绑定邮箱和手机立即绑定

抽象超类中的受保护字段是否应该在子类中使用 super 或 this 访问?

抽象超类中的受保护字段是否应该在子类中使用 super 或 this 访问?

郎朗坤 2022-01-19 13:00:53
假设我有以下抽象类。public abstract class Account {    protected String Id;    protected double balance;    public Account(String Id, double balance) {        this.Id = Id;        this.balance = balance;    }}以及以下子类public class CheckingAccount {    public CheckingAccount(String Id, double balance) {        super(Id, balance)        if(super.balance > 10_000) this.balance += 200;    }}访问受保护成员时,子类的上下文中允许使用“this”和“super”。使用一个比另一个更好吗?'super' 明确了该字段的来源。我知道我可以在balance不指定隐式参数的情况下使用,但我只是好奇如果想指定隐式参数,它在实践中是如何使用的。
查看完整描述

2 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

由于 CheckingAccount 从 Account 继承受保护的字段余额,因此使用superthis关键字访问 CheckingAccount 类中的字段余额并不重要。但是,我更喜欢“这个”。

如果 Account 类(基类)中有一个受保护的方法,而 CheckingAccount 类中有一个被覆盖的方法,那么在这种情况下你必须小心使用superthis,因为它们不是同一个 body 实现!


查看完整回答
反对 回复 2022-01-19
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

我认为您不应该使用任何protected字段来强制封装。提供一种protected void addToBalance(double value)方法将是更清洁的方法。


如果想指定隐式参数,我只是想知道在实践中如何使用它


出于某种学术原因,这里有不同之处:


public abstract class Account {

    protected String Id;

    protected double balance;


    public Account(String Id, double balance) {

        this.Id = Id;

        this.balance = balance;

    }

}


public class CheckingAccount {

    // overwrite existing field

    protected double balance;


    public CheckingAccount(String Id, double balance) {

        super(Id, balance);

        this.balance = balance;

        if(super.balance > 10_000) this.balance += 200;

    }

}


查看完整回答
反对 回复 2022-01-19
  • 2 回答
  • 0 关注
  • 162 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号