亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

抽象超類中的受保護字段是否應該在子類中使用 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 關注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號