2016-07-18 3 views
4

나는 환자 클래스에 사람이 클래스를 확장 어려움을 겪고다른 생성자로 클래스를 확장하는 방법은 무엇입니까?

나는 생성자와 Person 클래스는 그때

공용 클래스 환자가 사람을 확장하는 환자 클래스가

public Person(String firstname,String surname) { 
     fFirstname=firstname; 
     fSurname=surname; 
    } 

처럼 보이는이

대략 찾고있는 환자를위한 생성자를 갖고 싶습니다

public Patient(String hospNumber) { 
    fFirstname = lookup(hospNumber,"firstname"); 
    fSurname = lookup(hospNumber,"surname"); 
} 

그러나 환자 생성자 (String, String)가 필요하다는 불만이 있습니다. 왜 그런지 알 수 있지만 환자의 개인 수업을 확장하는 방법을 알 수 없습니다.

답변

4

그냥이 방법은 super 생성자 호출 그 결과를 전달합니다

public Patient(String hospNumber) { 
    super(lookup(hospNumber,"firstname"), lookup(hospNumber,"surname")); 
} 

그 방법은 그들이 그렇지 않으면 '아직 때 구축되지 않은 호출 된 것 this 때문에, 정적해야 다시 호출됩니다.

+0

나는 그것을 시도했지만 슈퍼 (fFirstname, fSurname) 앞에 fFirstname과 fSurname을 생성하는 두 줄이 있었는데, 이것은 super가 첫 번째 줄이어야한다는 오류를 생성했다. 귀하의 제안은 잘 작동합니다. 감사합니다. –

+1

@TonyWolff super는 항상 첫 번째 라인이되어야합니다. – Arjit

2

어느 쪽이든 당신은

public Person() { 

} 

또는

당신은 생성자 super 방법을 사용하여 Person 클래스를 호출 할 필요가 Person 클래스의 기본 생성자를 가질 수 등의 2 인수 생성자

public Patient(String hospNumber) { 
    super(lookup(hospNumber,"firstname"), lookup(hospNumber,"firstname")); 
} 
2
에게

환자 생성자를 this로 변경하십시오.

public Patient(String hospNumber) { 
    super(lookup(hospNumber,"firstname"), lookup(hospNumber,"surname")); 
} 

는 그러나 lookup 방법은이 작업을 수행하기 위해 정적 할 필요가있다. 유사한

public Patient(String hospNumber, String firstname, String surname) { 
    super(firstname,surname); 
} 

또는 뭔가 : 는 그렇지 않은 경우로 변경해야합니다.

마지막으로 Person 클래스에 다른 생성자를 추가 할 수도 있습니다. 나중에 Person()처럼 나머지 세부 정보를 설정하십시오. 이렇게하면 환자의 생성자에 super()를 쓸 필요가 없습니다.

사이드 노트 : 클래스에는 동일한 매개 변수가없는 한 생성자가 두 개 이상있을 수 있습니다.

슈퍼 클래스 (이 클래스가 상속하는 클래스)의 생성자를 호출합니다.

관련 문제