3

私は大学のコース管理システム(コース用)のモデルを作成しようとしています。私はextendsの小さな制限に遭遇しました。つまり、特定のクラスが2つのクラスを拡張することは不可能です。モデルは次のとおりです。

                     Professor
                    /                  
             Staff
          /          \                       
    Person            Tutor            
           \         /      
             Student            

それで私はスタッフと学生を拡張する人と教授を拡張するスタッフを得る。今、私はクラスチューターとの小さなジレンマを抱えています。チューターは基本的に学生です(studentIDを持っています)が、ある意味では大学の従業員です(グループ講義を行ったり、特定のプロジェクトを担当したりします)。私は2つの拡張機能を使用できないので、他の選択肢は何ですか?可能であれば、誰かが実装を使用して非常に簡単な例を示すことができますか?そのインターフェースの例を見てきましたが、Studentはインターフェースではないので、プログラムでどのように使用できるのか正確にはわかりません。

4

5 に答える 5

8

継承を使用せず、構成を使用します。誰もが人ですが、1つ以上の役割があります:学生、家庭教師、教授、スタッフ。

または、オプションでスタッフと学生を分割し、それらに役割を持たせることができます。次に、役割によって、実行できることと実行できないことが決まります。

于 2011-10-26T11:53:29.840 に答える
4

によって実装されたメーカーStudentとインターフェース。StaffTutor

StudentgetStudentId()メソッドを宣言し、などを宣言しますStaffgetLectures()getProjects()

于 2011-10-26T11:25:35.480 に答える
4

あなたはこのようなことをすることができます。

interface Person { ... }

interface Staff extends Person { ... }

interface Student extends Person { ... }

class Tutor implements Staff, Student { ... }

class Professor implements Staff { ... }

残念ながら、両方にロジック(つまり、フィールドまたは非抽象メソッド)を配置することはできません。また、両方StaffStudentクラスにする必要があり、Javaクラスは2つのクラスを拡張できないためです。

抽象クラスを作成するStudent Staff(両方ではない)、ロジックをその中に入れることができます。ただし、1つが抽象クラスであり、1つがインターフェイスである必要があるという概念的な理由がないため、これは一種のエレガントではありません。理想的には、両方とも抽象クラスである必要がありますが、そのためには、MIを使用する言語に切り替える必要があります。

interface Person { ... }

interface Staff extends Person { ... }

abstract class Student implements Person {
    long studentID;
    ...
}

class Tutor extends Student implements Staff { ... }

class Professor implements Staff { ... }
于 2011-10-26T11:38:46.053 に答える
2

人、スタッフ、および学生のインターフェイスを作成します。共通の機能が必要な場合は、カプセル化を使用してください。

于 2011-10-26T11:26:24.590 に答える
0

他の人が指摘しているように、Javaでこれを行うには、スーパークラスではなくインターフェースを定義する必要があります。Javaでは複数の拡張は許可されていません。

しかし、継承よりも優れた代替手段があるかもしれません。この場合、およびサブクラスに複数のスーパークラスを拡張させたいと思うほとんどすべての状況で、継承ではなく委任を使用して状況をモデル化する方法を見つけようとします。

インターフェイスであるオブジェクトPersonのセットを含むクラスを作成し、を実装します。そうすれば、人は複数のタイプの人に「なる」のではなく、複数の役割を持つことができます。RoleRoleStudentStaffRole

于 2011-10-26T11:52:16.377 に答える