우선, 생성자 자체에는 암시적인 인수 없는 생성자가 있습니다(기본값).
① 생성자를 작성하지 않으면 클래스의 첫 번째 코드 줄에는 실제로 기본 인수 없는 생성자가 있습니다. 생성자(시스템이 암시적으로 공식이 작성됩니다.)
public class Student { private String name; // public Student() {} 隐式地“写”在这里,你看不见 // Strudent类中虽然没有写构造方法,但相当于有上面的无参构造 // 只不过是隐式的,你看不见 }
(추천 동영상: java 동영상 튜토리얼)
②매개변수가 있는 생성자만 작성하세요. 이는 매개변수가 있는 생성자만 작성하세요. 매개변수 없는 생성자 차단되고 무시되며 유효하지 않은 것으로 간주됩니다.)
public class Student { private String name; public Student(String name) { this.name=name; } // 此时原来Strudent类中的隐式的无参构造方法被屏蔽了,无效了 // 类中只有带参构造 }
3매개변수 없는 생성자와 매개변수 있는 생성자를 모두 갖고 싶다면 매개변수 없는 생성자 메서드와 매개변수 있는 생성자 메서드를 명시적으로 작성해야 합니다.
public class Student { private String name; public Student() {} // 显式地将无参构造写出来 public Student(String name) { this.name=name; } // 若想Strudent类中拥有无参构造方法,必须显式地写出来 }
상속을 추가로 결합하려면 다음을 수행해야 합니다. 자식 부모 클래스를 생각해 보세요.
4하위 클래스의 생성자 메서드(매개 변수가 없거나 매개 변수가 있는 경우)에서 메서드의 첫 번째 코드 줄은 실제로 부모 클래스의 매개 변수 없는 생성자를 암시적으로 포함합니다
즉, super ()
public class Stu extends Student { private String name; public Stu() { // super(); // 在子类的无参构造中,super()是隐式的“写”在这里的 } public Stu(String name) { // super(); this.name=name; // 在子类的带参构造,上面的super()同样也是隐式的“写”在这里的 } }
이것이 하위 클래스의 생성자를 호출할 때 기본 super()가 존재하기 때문에 부모 클래스의 매개변수 없는 생성자가 먼저 호출되는 이유입니다.
⑤위의 ②와 유사하게 이때 매개변수화된 생성자를 작성하면 super(xx)는 암시적인 super()를 차단합니다.
public class Stu extends Student { private String name; public Stu(String name) { // super(); 原来隐式写在这里的super()被屏蔽了,无效了 super(name); // 在子类的带参构造, 由于的super(name)的存在,super()无效了 //此时子类的带参构造中,只有super(name) } }
이것이 상위 클래스에 매개변수 없는 생성자가 없는 경우(예: 매개변수 - 사례 2)에 해당하면 하위 클래스의 생성 메서드가 컴파일을 통과할 수 없습니다. 이는 하위 클래스의 생성자(매개변수 포함 여부에 관계 없음)가 상위 클래스의 매개변수 없는 생성자를 호출하기 때문입니다. 컴파일러는 자식 클래스의 생성자 2개에 super()를 삽입하려고 하지만 부모 클래스의 기본 생성자가 정의되지 않았으므로 컴파일러는 오류 메시지를 보고합니다.
이 문제를 해결하려면
1) 부모 클래스에 매개 변수 없는 생성자를 추가하세요. - 부모 클래스에 매개 변수 없는 생성자를 명시적으로 추가하세요.
2) 부모 클래스에서 매개 변수가 있는 사용자 지정 생성자를 삭제하세요. ——기본값을 복원하는 것과 같습니다. 매개변수 없는 구성
3) 하위 클래스 생성자에 Super(XXX) 추가 ——기본 super()를 보호하기 위해 ⑤의 원래 값을 사용합니다.
이 기사는 PHP 중국어 웹사이트, java Tutorial 칼럼에서 가져온 것입니다. 배우다!
위 내용은 JAVA 상속에서 자식 부모 클래스의 구성 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!