2011-12-28 6 views
0

가능한 중복 :
Java Constructor InheritanceJava 클래스 생성자도 상속되지 않는 이유는 무엇입니까?

서브 클래스를 생성,

  1. 왜 생성자를 만들고 모든의 ctor에서 슈퍼를 작성해야합니까?
  2. 내 행동이 수퍼 클래스와 비슷하다면 그걸 상속해야한다고 생각하지 않습니까?
+4

아마도 이미 답변 : http://stackoverflow.com/questions/1644317/java-constructor-inheritance – Eugene

+0

당신은 반드시 모든 생성자에'super'라고 쓸 필요는 없습니다. 수퍼 클래스에 기본 (public no-argument) 생성자가 있다고 가정합니다. 하위 클래스는 생성자를 지정하지 않으면 컴파일시에 단순히'super();'를 호출하는 기본 생성자를 암시 적으로 가져옵니다. 명시 적으로 생성 한 모든 생성자는 첫 번째 행으로'super();'를 암시 적으로 호출합니다 - 생성자의 첫 번째 행에서 명시 적으로 수퍼 클래스에서 오버로드 된 생성자 중 하나를 호출하지 않는 한 (예 :'super (myParameter);). – hotshot309

답변

1

수퍼 클래스의 인스턴스를 만들지 않으므로 생성자가 상속되지 않으므로 새 클래스의 인스턴스가 생성됩니다. 호출 할 수퍼 클래스 생성자를 알 수있는 방법이 없습니다.

공정하게하려면 기본값 (arg 생성자 없음)이 항상 존재해야합니다. 그것은 당신이 언급하고있는 구체적인 주장입니다, 나는 추측하고 있습니다.

+0

투표가 실패하면 이유를 설명하십시오 - 나는 내 대답을 더 잘 만들려고 노력할 것입니다. – Kylar

+0

super는 모든 super 생성자에 모두 arg가 필요한 경우 기본 생성자가 생성되지 않거나 컴파일 오류를 생성하는 경우에만 super의 기본값이 존재할 때만 존재합니다. –

+0

클래스를 만들 때마다 기본 생성자가 생성됩니다. 관계없이 슈퍼에 존재합니다. – Kylar

0

사실 자바는 항상 하위 생성자를위한 새로운 생성자를 생성하지만, 기본값과 매개 변수 생성자는 생성하지 않습니다. 클래스에 기본 (매개 변수 없음) 생성자 이외의 생성자가있는 경우 다시 정의해야합니다 ... 생성자는 동작 메서드가 아니라 개체 초기화 (새 특성을 사용하는 하위 클래스의 경우 변경 될 수 있음)

+0

"항상"올바르지 않습니다. 생성자 선언이없는 클래스에는 기본 생성자가 제공됩니다. –

+0

오른쪽, thanks :) – Slash

0

디폴트의 ​​인수 없음 생성자는 디폴트로 상속되어 불려갑니다. 다른 것을 호출하고 싶으면 super()를 사용할 수 있습니다. 기본 생성자를 사용할 수없는 경우 접근 가능한 슈퍼 생성자 중 하나를 사용해야합니다

+1

생성자는 상속되지 않습니다. 수퍼 클래스의 인수없는 생성자는 서브 클래스의 기본 생성자 (있는 경우)에 의해 호출됩니다. –

0

생성자의 이름은 클래스 이름과 동일하며 하위 클래스로 상속 할 수있는 경우 생성자는 더 이상 생성자가 될 수 없습니다 서브 클래스의. 기본 매개 변수없는 생성자는 항상 상속되지만.

+0

생성자는 상속되지 않습니다. 기본 생성자는 수퍼 클래스의 인수없는 생성자를 호출합니다. –

0

생성자는 클래스 청사진에서 객체를 만들 때, 즉 클래스의 데이터 멤버를 초기화하기 위해 호출됩니다. 하위 클래스가 생성자를 상속하는 경우 하위 클래스를 호출하는 동안 상위 클래스의 데이터 멤버에 대한 지식도 필요합니다. 그것은 실제 시나리오에서 볼 수있는 것이 아닙니다. 예를 들어, 페라리 유형의 객체를 만드는 경우 속도, 가속도와 같은 매개 변수 초기화에 관심이있을 것입니다. 페라리가 자동차에서 상속 받더라도 Car 객체의 매개 변수를 초기화 할 필요는 없습니다. 따라서 Ferrari의 생성자를 호출하는 동안 Ferrari의 멤버에 대해서만 괴롭 히고 부모 클래스에는 속하지 않습니다. 나는 나의 요점을 분명히하기를 희망한다.

관련 문제