假设我有以下抽象类。
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
,但是我只是想知道如果有人想指定隐式参数如何在实际中使用它。
答案 0 :(得分:2)
由于CheckingAccount从帐户继承了受保护的字段余额,因此使用 super 或 this 关键字访问CheckingAccount类中的字段余额并不重要。但是,我更喜欢“这个”。
如果Account类(基类)中有一个受保护的方法,而CheckingAccount类中有一个被覆盖的方法,则您必须仔细使用 super 或 this 在这种情况下,因为它们不是同一主体实现!
答案 1 :(得分:1)
我认为您不应使用任何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;
}
}