2014-06-09 2 views
0

질문 :
수퍼 클래스 Person을 구현합니다. Person 클래스를 상속받은 학생 및 강사 의 두 클래스를 만듭니다. 사람은 이름과 출생 연도가 있습니다. 학생 에는 전공이 있고 강사에게는 월급이 있습니다. 클래스 선언, 생성자 및 모든 클래스의 String에 대한 메서드를 작성합니다. 이 클래스와 메소드를 테스트하는 테스트 프로그램 을 작성하십시오.모든 클래스의 선언, 생성자 및 toString 메서드

이것은 복잡하지는 않지만 저는 java의 초보자입니다. 도와주세요. 두 생성자 'student()'및 'instructor()'모두에서 다음 오류가 발생합니다. 사전에

package One; 

class Person{ 
    String name; 
    int yob; 

    Person(String s, int d){ 
     name = s; 
     yob = d; 
    } 
    @Override 
    public String toString(){ 
     return "Name: "+name+"\n Year of Birth: "+yob; 
    } 
} 
class Student extends Person{ 
    String major; 

    Student(String s){ 
     major = s; 
    } 
    @Override 
    public String toString(){ 
     return "The student did his majors in "+major; 
    } 
} 
class Instructor extends Person{ 
    int salary; 

    Instructor(int a){ 
     salary = a; 
    } 
    @Override 
    public String toString(){ 
     return String.format("The salary is ",salary); 
    } 
} 

public class Test { 

    public static void main(String[] args) { 
     Person p = new Person("Stephen", 1991); 
     System.out.println(p); 
    } 
} 

감사 :

"constructor Person in class Person cannot be applied to given types; 
    required: String,int 
    found: no arguments 
    reason: actual and formal argument lists differ in length." 

여기 내 코드입니다.

+0

'사람() {}' – Jens

답변

2

코드에서 StudentInstructor 클래스는 Person에서 파생됩니다. 즉, 기본 클래스에서 필요로하는 생성자 매개 변수는 파생 클래스에서도 필요합니다. Student을 만들 때 컴파일러는 Person 생성자의 매개 변수를 어떻게 넣어야할지 어떻게 알 수 있습니까?

그래서 코드는 다음과 같이해야한다 : 우리가 super 생성자 키워드를 사용하여 기본 클래스 Person 필요로하는 생성자 매개 변수를 전송하는 방법

// Student constructor 
Student(String majorParam, String nameParam, int yobParam) 
{ 
    super(nameParam, yobParam); 
    this.major = majorParam; 
} 

... 

// Similarly, Instructor constructor 
Instructor(int salaryParam, String nameParam, int yobParam) 
{ 
    super(nameParam, yobParam); 
    salary = salaryParam; 
} 

알 수 있습니다. 이것은 항상 파생 클래스 생성자의 첫 번째 줄이어야합니다. 로

그런 다음 Student 구성하고 Instructor 수 있습니다 : 당신은 Person 클래스에 인수가없는 생성자를 구현해야

Student s = new Student("TheMajor", "TheName", 42); 

Instructor i = new Instructor(1000, "TheName", 42); 
+0

@SotiriosDelimanolis : 나는이 글을 읽고 있어요 것은 배울 수 게다가. 어떤 언어가 이전 답변입니까? C++? – Abhi

+0

@metacubed : 정말 고마워요. –

0

Person 클래스에는 빈 생성자가 없으므로 생성해야하므로 완벽하게 작동해야합니다. super()가 명시 적으로 호출되지 않는 한 기본적으로 호출된다는 것을 잊지 마십시오.