2012-03-28 5 views
1

을 설계 도움이 필요, 우리가 만드는 임무를 봤는데 : 변수 firstName, lastName, streetAddress, zipCodephone내가 숙제를 들어 배열

Person 클래스입니다.

CollegeEmployeePerson을 확장하고 ssn, salary,deptName을 추가합니다.

FacultyCollegeEmployee은 부울 tenure을 추가하여 확장합니다.

마지막으로, StudentGPAmajor을 추가하여 person를 확장합니다.

모든 것이 화면에 표시되는 것처럼 보이고 배열의 다음 레코드로 14 개의 레코드 (7 명의 학생, 4 명의 직원 및 3 명의 교수진)를 생성합니다.

여러 데이터 유형을 사용하는 3 개의 다른 클래스가 있는데,이 기능을 사용하여 배열을 채우는 방법을 이해할 수 없습니다. 이것은 완전히 정수가 아니었던 내가 만든 첫 번째 배열입니다. 자바 튜토리얼은 나에게 아무것도주지 않았고, Java: Generic Static Multidimensional Arrays에는 훌륭한 정보가 있지만, 지금 당장 내 머리를 감쌀 수있는 것보다 조금 더 있습니다.

저는 처음에 array[14][10]을 만들려고했습니다. 열 개의 객체에 대해 각각 14 개의 변수를 만들었지 만 데이터 유형을 혼합 할 수는 없습니다. 그게 내가 길을 잃은 곳이야.

누구나이 어레이를 설계하고 나중에 그 값을 표시하는 방법에 대한 제안 사항이 있습니까?

힌트와 제안 사항을 보내 주시면 감사하겠습니다.

감사합니다.

+4

당신은 OOP의 기초를 다시 방문 할 필요가 (당신은 예를 들어, instanceof를 사용하여 확인할 수 있습니다). 당신의 모든 물건은'사람'입니다 –

+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(); 

. 더 많은 도움 instanceof를 사용

하나의 예를 들어 here을 찾고보십시오 것은 :

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 인스턴스를 기대하고 있기 때문에 서브 클래스는 항상 는-A 자신의 슈퍼 클래스와 관계를 가지고 있기 때문에

, 당신은 Person의 서브 클래스의 인스턴스를 넣을 수 있습니다.

사람이 print 방법을 사용하기 때문에 배열에서 꺼내는 모든 사람에게 print 전화를 걸 수 있습니다. 서브 클래스는 관련 데이터를 인쇄 할 수 있도록 자체 구현을 제공합니다. 그렇게하면 어떤 특정 인스턴스가 어떤 서브 클래스인지에 대해 실제로 신경 쓰지 않아도됩니다. 인스턴스에 대한 올바른 print 구현이 런타임에 호출됩니다.

+1

디버깅 용으로 만 사용되어야하는'toString'을 오버라이드하는 대신'print' 메쏘드를 +1하십시오. – mre

1

시작하려면

Person [] myArray = new Person [14];

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이 수행하는 메서드가 있음을 알고 있습니다. 따라서이 요소의 경우에만 firstName, lastName, streetAddress, zipCodephone을 사용할 수 있습니다. 그들이 검색된 후.

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에 대한 상속 조회).

당신이 실제 유형에 따라 특정 행동을해야하는 경우

, 당신은 구체적인 형태로 배열 요소를 캐스팅 할 필요가

관련 문제