下面给出了一个特定的抽象类。
abstract class Score{
private double balance;
protected String getBalance(String pin){
if (check(pin))
return Double.toString(balance);
return "Введенный пин-код не корректен";
}
//баланс для внутренних операций
protected Double getBalance(){
return balance;
}
}
需要两种方法,因为对于手动操作,将使用第一种方法(使用 PIN 码),而对于自动操作,将使用第二种方法(自动,例如,现金返还应计)。
有一个实现以下功能的后继者
public class RegularAccount extends Score{
public void pay() {
double price = super.getBalance() * 0.1;
//TODO
}
}
一切都会好起来的,但是如果你创建了一个类的实例RegularAccount
,你可以直接调用该方法getBalance()
,这是我想禁止的。我试图将方法变成一个接口,使其抽象,只是使用访问修饰符,但这一切都没有帮助或者是不可接受的。
从逻辑上讲,我假设getBalance()
抽象类中的方法应该是private
,但是如何从继承人那里调用它,以尽可能保护自己呢?
有没有办法解决这个问题。
具有访问修饰符的方法
protected
只能从其访问,main
因为声明它的类main
与Score
.把
Score
它放在一个单独的包里,除了继承人之外,将无法从包外访问。另一种更正确的方法(或者更确切地说,无论是否正确拆分成包,都需要这样做)是根本不给客户一个特定实现的引用(
RegularAccount
在你的情况下)。使用客户端应该使用的方法创建一个接口,并将接口提供给客户端。getBalance
如果客户端无法使用,则接口中不应有方法。将这样的接口放置在更靠近 的地方是有意义的
Score
,即 也许在同一个包中。作为一个选项:使用拒绝访问的消息覆盖
getBalance
方法RegularAccount
。使用方法getBalance(String pin)
但是,使用祖先方法仍然有效。