2016-04-02 12 views
1

である場合にのみ使用することができます方法を作るためにどのよう
従業員
マネージャー
ボスは、私は4つのクラス</p> <p>人を持って、それはボスクラス

従業員は Managerは、従業員
ボスを拡張する人
を拡張しますマネージャー

私は方法があります:
従業員は、私が唯一のボスクラスは、従業員の給与を変更できるようにする方法setSalary(){ ... }

を持っています。 従業員クラスでもマネージャークラスでもないボスクラス。

どうすればいいですか?私はinstanceofを使用する方法があることを知っているが、どのように知っているのかわからない。

+0

ボスクラスでのみ必要な場合は、なぜ親クラスで宣言しましたか?何らかの理由であなたが親クラスでそれを必要とする場合は、空のメソッドの実装を残すことができます、あなたはボスを除いてすべてのクラス抽象を宣言することができます... – cantSleepNow

+1

可能重複: [JavaでC++の '友人'の概念をシミュレートする方法はありますか?](http://stackoverflow.com/questions/182278/is-there-a-way-to-simulate-the-c-friend-concept- in-java) –

+0

これはちょっと変だけど、あなたはsetSalaryの呼び出し側クラスをチェックすることができます。http://stackoverflow.com/questions/11306811/how-to-get-the-caller-class-in-java – Turo

答えて

2

場合、あなたはそれがsetSalary(..);法だ呼び出すことから、従業員を避けることができる方法はありません。プライベートメソッドは、そのクラスの別のメソッドによってクラス内で呼び出すこともできます。

可能性のあること:setSalary(..);の可視性をパッケージレベルに設定し、EmployeeBossのみを同じパッケージに入れ、他はすべて別のパッケージに入れます。そして、あなたが好きな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; 
     } 

} 

EmployeeBossのあるパッケージの外では、EmployeesetSalary(..);に電話できません従業員の給与を更新する唯一の方法は、公開方法Bossを呼び出して、給与と従業員を引数として渡すことです。

関連する問題