对于我的作业,我们的任务是创建:
Person
类包含变量firstName, lastName, streetAddress, zipCode
和phone
。
CollegeEmployee
扩展Person
并添加ssn, salary,
和deptName
。
Faculty
通过添加布尔值CollegeEmployee
来扩展tenure
。
最后但并非最不重要的是,Student
通过添加person
和GPA
来扩展major
。
一切看起来都很好显示在屏幕上,我正在进行下一部分工作,即在一个阵列中创建14条记录(7名学生,4名员工和3名教员)。
3个不同的类,有多种数据类型,我不能为我的生活弄清楚如何用这个填充数组。这是我创建的第一个不是完全整数的数组。 Java教程没有给我任何东西,虽然Java: Generic Static Multidimensional Arrays有一些很好的信息,但它比我现在可以包围的还要多一点。
我最初想过为10个对象创建array[14][10]
- 十四个变量 - 但我不能混合数据类型。那就是我迷路的地方。
任何人都有关于如何设计这个数组的建议,并且能够在之后显示它的值?
任何提示和建议都将不胜感激!
感谢。
答案 0 :(得分:3)
据我了解,不需要对多维数组感兴趣。
1)创建一个采用Person
个实例的数组。
Person [] myPeeps = new Person[14];
2)在print
上创建一个Person
方法,该子类覆盖以打印相关信息。
因为您的数组需要Person
个实例,所以您可以放置Person
的任何子类的实例,因为子类与它们的超类之间始终具有 is-a 关系。
因为Person有一个print
方法,所以你可以在从数组中提取的任何内容上调用print
。子类提供了自己的实现,因此可以打印相关数据。这样,您并不真正关心任何特定实例的子类;在运行时调用实例的正确print
实现。
答案 1 :(得分:2)
您不需要多维数组。您可以创建一个Person对象数组。
Person[] people = new Person[14];
people[0] = new Student();
people[1] = new Employee();
.
.
.
答案 2 :(得分:1)
开始:
Person [] myArray = new Person [14];
答案 3 :(得分:1)
这就是为什么面向对象编程如此精彩的原因。如果您注意到,所有Faculty
,CollegeEmployee
和Student
都是Person
类型的子集。因此,如果将它们声明为类型Person
,则可以将它们全部包含在同一数据集中。
Person[] array = new Person[14];
您可以将所有对象添加到该数组中;但要小心。当您使用数组Java的元素时,现在只知道每个元素都有Person
所做的方法 - 因此您只能使用firstName
,lastName
,{{除非您在检索对象后再投射对象,否则请从这些元素中添加1}},streetAddress
和zipCode
。
答案 4 :(得分: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
}
答案 5 :(得分:1)
您也可以像Person[]
数组一样创建int[]
数组。 e.g。
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。
e.g。
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();
在您的代码中,然后考虑使您的类抽象。
答案 6 :(得分:0)
类Person
是要存储在数组中的所有对象类型的公共超类。您可以基于该常用超类型创建阵列。然后,您可以访问该tpe中定义的数组中所有元素的方法,无论实际类型如何 - 行为都是在实际类型中定义的(如果不清楚,请查找java的继承)。
如果您需要基于实际类型的特定行为,则需要将数组元素强制转换为具体类型(例如,您可以使用instanceof
来确定它)