2012-03-28 114 views
1

對於我的家庭作業,我們一直在負責製作:我需要一些幫助設計一個陣列

Person類變量firstName, lastName, streetAddress, zipCodephone

CollegeEmployee延伸Person並且增加了ssn, salary,deptName

Faculty擴展CollegeEmployee通過添加布爾值tenure

最後但並非最不重要,Student延伸person加入GPAmajor

一切看起來都不錯顯示屏幕,和我上移動到這是一個數組創建14條記錄(7名學生,4名員工和3個教師)分配的一個部分。我不知道如何用這個來填充數組。這是我創建的第一個不完全是整數的數組。 Java教程沒有給我任何東西,雖然Java: Generic Static Multidimensional Arrays有一些很好的信息,但它比我現在可以包裹我的頭更多一點。

我最初想到創建array[14][10] - 十個對象每個十四個變量 - 但我不能混合數據類型。那是我迷路的地方。

任何人有任何建議如何設計這個數組,並能夠顯示它後面的值?

任何提示和建議,將不勝感激!

感謝。

+4

您需要重新OOP基礎。你所有的對象都是'Person's – 2012-03-28 17:34:46

+0

教師**是 - 一名**大學僱員?不現實;) – 2012-03-28 17:35:30

+0

@Andreas_D - 我認爲你需要查看「教師」。我不認爲街上的人走進教課;) – 2012-03-28 17:36:27

回答

1

您還可以創建Person[]陣列,就像您使用int[]陣列一樣。例如

Person[] people = new Person[14] 

然後,您可以添加的人是這樣的陣列:

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

如果你要檢查是在你將要使用instanceof每個索引什麼樣的人。嘗試尋找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)上創建一個Person方法print,其子類覆蓋打印的相關信息。

因爲你的陣列預計Person情況下,你可以把任何Person子類的實例,因爲子類總是有一個是,一個與他們的超關係。

因爲Person有一個print方法,所以你可以調用print來從數組中取出任何東西。子類提供他們自己的實現,以便他們可以打印他們的相關數據。這樣,你並不關心哪個子類是任何特定的實例。運行時會調用實例的正確print實現。

+1

用於'print'方法的+1而不是覆蓋'toString',它應該僅用於調試目的。 – mre 2012-03-28 17:38:26

2

你並不需要一個多維數組。你可以創建一個Person對象的數組。

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

這就是爲什麼面向對象編程如此美妙的原因。如果您會注意到,所有Faculty,CollegeEmployeeStudent都是Person類型的子集。因此,如果聲明爲Person,則可以將它們全部包含在相同的數據集中。

Person[] array = new Person[14]; 

您可以將所有對象添加到該數組;但是,要小心。當你去使用數組的元素時,Java現在只知道每個方法都具有Person所做的方法 - 因此,只能使用這些元素中的firstNamelastName,streetAddress,zipCodephone,除非您投射對象他們被檢索後。

1

由於它們都是Person型,爲什麼不使用Person陣列呢?

Person [] people = new Person[14]; 

您可以安全地添加各類Person這個數組,但是你只能把他們當作Person(不含鑄造)。使每個子類輸出定製的詳細信息,並在Person

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

在每個子類添加此方法和覆蓋此方法來打印其成員變量:

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

並填充陣列時:

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

Person類是您想要存儲在數組中的所有類型的對象的常見超類。您可以基於該公共超類型創建數組。然後,可以訪問在數組的所有元素中定義的方法,而不管實際類型如何 - 行爲與實際類型中定義的一樣(如果不明確,請查找java的繼承)。

如果您需要根據實際類型的特定行爲,則需要將數組元素轉換爲具體類型(你可以決定它使用instanceof,例如)