2017-01-22 7 views
1

のメンバーの一部にアクセスするためにどのように私は、基本クラスに基底クラス

class Administrator() 
    { 
     void addEmployee(){ some code }; 
     void Salary_PaySlip() { some code }; 
    } 
class HR: Administrator 
    { 
      // make use of addEmployee() 
    } 
class Accountant: Administrator 
    { 
      // make use of void Salary_PaySlip() 
    } 

を持っているこれは単なる一例です。

ここで私はAccountantのメソッドSalary_PaySlip()を使用します。方法addEmployee()Accountantでアクセスできません。同じ方法class HRaddEmployee()メソッドにしかアクセスできません。

誰かがこれを解決するのに役立つことができますか?事前に

おかげ

+0

するvar C =新しい管理者(); –

+2

この悲鳴 "継承を使用しない"か、何か不足していますか? HRと会計士は管理者を通じて何を共有しますか? –

+1

これら2つのメソッドをそれぞれの派生クラスに移動してみませんか? - 継承が必要な場合理解できません! –

答えて

3
あなたの問題は(私はあなたがオブジェクト指向設計のSOLID原則チェックをお勧め: https://en.wikipedia.org/wiki/SOLID_(object-oriented_design))インタフェース棲み分け原理とは全く関係しているシングル責任原則としてsumarizedすることができ

あなたを従業員とPaySlipを同時に追加できるクラス管理者が作成されました。しかし、クラスの一部を使用する権限を持つ人物を分離する必要があります。これは、このクラスを2つの異なるクラスに分割する必要があるというサインです。各方法ごとに1つ。

"クライアント"クラス(メソッドを使用する人)を作成することができます。継承ではなくコンポジションを使用して、この継承リンクを持つことが意味をなさないと考えられるので、最後に管理者パーツにアクセスすることをお勧めします。

もちろん関係ありませんまだ(しかし、より多くの情報なしに、より良い行うことはできません)サンプルコードが

public class EmployeeAdministrator() 
{ 
    public void addEmployee(){ some code }; 
} 

public class SalaryAdministrator() 
{ 
    public void Salary_PaySlip() { some code }; 
} 

public class HR 
{ 
    public EmployeeAdministrator Administrator { get; } 
    // make use of addEmployee() 
} 

class Accountant 
{ 
    public SalaryAdministrator Administrator { get; } 
    // make use of void Salary_PaySlip() 
} 
+0

ありがとうございました。このコンセプトは簡単だと思われる。リンクをありがとう – IJAS

関連する問題