2011-05-11 6 views
5

나는 x가 다른 생성자로 추상적 인 수퍼 클래스를 가지고 있는지 궁금 해서요, 그리고 그 모든 생성자를 서브 클래스에서 사용할 수 있기를 원합니다. 서브 클래스에 모든 x 생성자를 작성해야합니까? 그들 모두가 슈퍼 (...)라고 부르 자고? 명확성을 위해 .. 중복 코드처럼수퍼 클래스에 건설을 전달

예를 보인다 :

public class SuperClass { 
public SubClass() { 
super(); 
} 
public SubClass(double d) { 
super(d); 
} 
public SubClass(BigDecimal b) { 
super(b); 
} 
public SuperClass(BigDecimal b, String s) { 
super(b, s); 
} 
[...] 
} 

답변

5

하지만 당신은 이런 식으로 할 필요가 :

public class SuperClass { 
public SuperClass() { 
... 
} 
public SuperClass(double d) { 
... 
} 
public SuperClass(BigDecimal b) { 
... 
} 
public SuperClass(BigDecimal b, String s) { 
... 
} 
[...] 
} 

은 필요보다 내가 마십시오. 이 방법으로 하위 클래스에서 공개 할 항목을 결정할 수 있습니다. 또한 일부 생성자는 하위 클래스에 적합하지 않을 수 있으므로 명시 적으로 코딩하지 않으면 기본적으로 작동하지 않습니다.

2

기본 생성자의 모든 오버로드에 대해 생성자를 제공 할 필요가 없습니다. 당신은 단지 하나만 있으면됩니다. 기본 생성자가 기본 (매개 변수없는) 생성자를 제공하면 생성자를 직접 제공하지 않아도됩니다. 컴파일러는 기본 클래스의 기본 생성자를 자동으로 호출하는 클래스의 기본 생성자를 자동으로 생성합니다.

참고 : 매개 변수없이 암시되어 있으므로 super()을 직접 호출 할 필요는 없습니다. 기본 생성자가없는 경우에만 필요합니다.

다양한 생성자가 있고 모두 필요하지 않다는 사실을 알고 있다면 일 수 있습니다. 부모 클래스가 너무 많은 것을 의미합니다.

1

이 같은 코드를 가질 수 있습니다

public class SuperClass { 
public SuperClass() { 
... 
} 
public SuperClass(double d) { 
... 
} 
public SuperClass(BigDecimal b) { 

} 
public SuperClass(BigDecimal b, String s) { 
this(b); 
} 
[...] 
} 

을하고 하위 클래스가 : 당신이 parenr와 아이 모두 생성자의 모든 유형을 원하는 경우

public class SubClass extends SuperClass{ 
public SubClass() { 
super(); 
} 
public SubClass(double d) { 
super(d); 
} 

public SuperClass(BigDecimal b, String s) { 
super(b, s); 
} 
[...] 
} 
1

는 다음 네, 당신이 필요를 명시 적으로 지정하지만 super()을 명시 적으로 호출 할 필요가 없습니다.

관련 문제