2012-03-28 5 views
1

を設計するいくつかの助けを必要とし、我々は作成する使命を帯びてきました。私は私の宿題のために配列

CollegeEmployeeは、Personを拡張し、ssn, salary,およびdeptNameを追加します。

FacultyCollegeEmployeeには、ブール値tenureを追加します。

なく、少なくとも最後に、StudentGPAmajorを追加することにより、personを拡張します。

すべてが画面に表示されているように見えますが、配列の14レコード(7人の学生、4人の従業員、3人の教員)を作成する課題の次の部分に移動します。

複数のデータ型を持つ3つのクラスがあり、私の人生にとっては、これで配列を取り込む方法を理解できません。これは完全に整数ではない私が作成した最初の配列です。 Javaチュートリアルでは私に何も教えてくれませんでしたが、Java: Generic Static Multidimensional Arraysには素晴らしい情報がありますが、今のところ私の頭を包み込むほどです。

私は最初にarray[14][10]を作成しようと考えていましたが、10個のオブジェクトごとに14個の変数がありますが、データ型を混在させることはできません。それは私が迷ったところです。

この配列をどのように設計し、後で値を表示することができるかについてのご意見はありますか?

ヒントやご意見があれば幸いです。

ありがとうございました。

+4

あなたはOOPの基本を再検討する必要があります。あなたのすべてのオブジェクトは 'Person'sです –

+0

教員**は**大学の従業員ですか?実際にはありません; –

+0

@Andreas_D - あなたは "教員"を探す必要があると思います。私は通りの人々が歩き回って教室を教えるとは思わない) –

答えて

1

また、単にあなたがint[]配列と同じように、Person[]配列を作成することができます。例えば

Person[] people = new Person[14] 

あなたは、このような配列にユーザーを追加することができます:あなたはinstanceofを使用したいと思うでしょう、各指標である人物の種類をチェックしたい場合は

people[0] = new Student(); 
people[1] = new CollegeEmployee(); 
people[2] = new Faculty(); 

。より多くの助けをhereを探してみinstanceofを使用しての

一例は次のとおりです。

if(people[0] instanceof Student){ 
    System.out.println("This person is a student"); 
} 

またはジェネリックを使用してみてください。

あなたはArrayList<Person>を作成することもできますし、このArrayListに人のいずれかのタイプを追加することができます。

ArrayList<Person> peopleList = new ArrayList<Person>(); 
//People can be added like this 
peopleList.add(new Student()); 
peopleList.add(new CollegeEmployee();) 

は再びあなたは、各インデックスにある人物の種類を確認するためにinstanceofを使用することができます!あなたのコードで

Person person1 = new Person(); 

を書くことがない場合

また、あなたのクラスの抽象をすることを検討してください。

3

私が理解しているところでは、多次元配列を気にする必要はありません。

1)Person個のインスタンスをとる配列を作成します。

Person [] myPeeps = new Person[14];

2)は、関連する情報を印刷するようにオーバーライドしたサブクラスPersonprintメソッドを作成します。

あなたの配列がPersonインスタンスを想定しているため、サブクラスは常にがあり、そのスーパークラスと関係があるので、あなたは、Personのいずれかのサブクラスのインスタンスを置くことができます。

Personにはprintメソッドがあるため、配列から引き出すものにはprintを呼び出すことができます。サブクラスは独自の実装を提供し、関連するデータを印刷できます。そうすれば、特定のインスタンスがどのサブクラスであるかは本当に気にしません。インスタンスの正しいprint実装が実行時に呼び出されます。起動するには

+1

'toString'をオーバーライドする代わりに' print'メソッドを+1します。これはデバッグの目的でのみ使用してください。 – mre

2

多次元配列は必要ありません。Personオブジェクトの配列を作ることができます。

Person[] people = new Person[14]; 
people[0] = new Student(); 
people[1] = new Employee(); 
. 
. 
. 
1

オブジェクト指向プログラミングは、とても素晴らしいですなぜこれが本質的です。あなたが気づく場合は、すべてのFacultyCollegeEmployee、およびStudentはタイプPersonのサブセットです。このため、タイプがPersonと宣言されている場合、それらのすべてを同じデータセットに含めることができます。

Person[] array = new Person[14]; 

すべてのオブジェクトをその配列に追加できます。ただし、注意してください。あなたがオブジェクトをキャストしない限り、したがって、あなただけfirstNamelastNamestreetAddresszipCode、及びこれらの元素からphoneを利用することができます - あなたはJavaは今だけ、それぞれがPersonはないメソッドを持っていることを知っている配列の要素を使用することを行くときそれらが取り出された後。

1

彼らはタイプPersonのすべてなので、なぜPerson配列を使用していませんか?

Person [] people = new Person[14]; 

あなたは安全に、しかし、あなただけ(鋳造なし)Personとして扱うことができ、この配列にPersonのすべての種類を追加することができます。

class Student extends Person { 
    void print() { // <-- note same method signature! 
     // print "I'm a Student", GPA, major 
    }   
} 

と配列が移入され:

そのメンバ変数を印刷するために、各サブクラスの出力は詳細をカスタマイズしている、それぞれのサブクラスでこのメソッドを Person

class Person { 
    void print() { 
     // default Person printing 
    } 
} 

にこのメソッドを追加し、上書きします

for (Person p : people) { 
    p.print(); // delegates to print method associated with the underlying type 
} 
0

クラスPersonは、配列に格納するオブジェクトのすべてのタイプに共通のスーパークラスです。その共通のスーパータイプに基づいて配列を作成できます。次に、実際の型に関係なく、配列のすべての要素でそのtpeで定義されているメソッドにアクセスできます。動作は実際の型で定義されています(これが明確でない場合はjavaの継承を参照してください)。

あなたが実際の型に基づいて具体的な行動が必要な場合は、具体的な型に配列要素をキャストする必要があります(あなたがたとえば、instanceofを使用して、それを決定することができます)

関連する問題