場合、あなたはそれがsetSalary(..);
法だ呼び出すことから、従業員を避けることができる方法はありません。プライベートメソッドは、そのクラスの別のメソッドによってクラス内で呼び出すこともできます。
可能性のあること:setSalary(..);
の可視性をパッケージレベルに設定し、Employee
とBoss
のみを同じパッケージに入れ、他はすべて別のパッケージに入れます。そして、あなたが好きなBoss
何か方法を持っているでしょうBoss
内の任意のEmployee
ためsetSalary(..);
はいくつかのメソッド内でのみ呼び出されることに注意してください:必要があります
public class Boss extends Employee {
public void setSalaryFor(Employee employee, int salary) {
employee.setSalary(salary);
}
}
そして、あなたのEmployeeクラスメソッドとして:
public class Employee extends Person {
private int salary;
//Package visibility
void setSalary(int salary) {
this.salary = salary;
}
}
Employee
とBoss
のあるパッケージの外では、Employee
はsetSalary(..);
に電話できません従業員の給与を更新する唯一の方法は、公開方法Boss
を呼び出して、給与と従業員を引数として渡すことです。
ボスクラスでのみ必要な場合は、なぜ親クラスで宣言しましたか?何らかの理由であなたが親クラスでそれを必要とする場合は、空のメソッドの実装を残すことができます、あなたはボスを除いてすべてのクラス抽象を宣言することができます... – cantSleepNow
可能重複: [JavaでC++の '友人'の概念をシミュレートする方法はありますか?](http://stackoverflow.com/questions/182278/is-there-a-way-to-simulate-the-c-friend-concept- in-java) –
これはちょっと変だけど、あなたはsetSalaryの呼び出し側クラスをチェックすることができます。http://stackoverflow.com/questions/11306811/how-to-get-the-caller-class-in-java – Turo