[부모가 있을시에]--------
1. 부모의 명백한 초기화와 초기화 블록 (선언, 정의된 순서대로 실행됨)
2. 부모의 생성자 몸체
----------------------------
3. 자식의 명백한 초기화와 초기화 블록 (선언, 정의된 순서대로 실행됨)
4. 자식의 생성자 몸체
public class A {
//명백한 초기화
private String parentProcess = "부모의 명백한 초기화";
//초기화 블록
{
System.out.println(parentProcess); //부모의 명백한 초기화 출력
System.out.println("부모 초기화 블록 호출");
parentProcess = "부모 초기화 블록";
System.out.println(parentProcess); //부모 초기화 블록 출력
}
public A(String parentProcess) {
System.out.println("부모 생성자 몸체 호출");
System.out.println(this.parentProcess); //부모 초기화 블록 출력
this.parentProcess = parentProcess;
System.out.println(this.parentProcess); //main 호출 출력
}
}
public class B extends A {
//초기화 블록
{
// System.out.println(process);
System.out.println("자식 초기화 블록 호출");
process = "자식 초기화 블록";
// System.out.println(process);
}
//명백한 초기화
private String process = "명백한 초기화";
public B(String process) {
super(process);
System.out.println(this.process); //명백한 초기화 호출 출력
System.out.println("자식 생성자 호출");
this.process = process;
System.out.println(this.process); //main 호출 출력
}
public static void main(String[] args) {
B b1 = new B("main 호출");
}
}
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
}
public class Student extends Person {
private String id;
private int year;
public Student(String name, String id) {
this(name, id, 1);
}
public Student(String name, String id, int year) {
//부모 생성자를 호출해서 부모로부터 상속받은 멤버변수 초기화, Person(name)한다고 보면 됨
super(name);
this.id = id;
this.year = year;
}
public static void main(String[] args) {
Student hylee = new Student("hylee", "2015");
}
}
public class A {
private int n = 0;
public A() {
System.out.println("부모 기본 생성자 ");
}
public A(int n) {
System.out.println("부모 생성자");
this.n = n;
}
}
public class B extends A {
private int x = 1;
public B(int x) {
System.out.println("자식 생성자");
this.x = x;
}
}
public class A {
private int n = 0;
//부모 A의 기본 생성자 없음
public A(int n) {
System.out.println("부모 생성자");
this.n = n;
}
}
public class B extends A {
private int x = 1;
public B(int x) {
System.out.println("자식 생성자");
this.x = x;
}
}//error
public class A {
private int n = 0;
//부모 A의 기본 생성자 없음
public A(int n) {
System.out.println("부모 생성자");
this.n = n;
}
}
public class B extends A {
private int x = 1;
public B(int x) {
super(x);
System.out.println("자식 생성자");
this.x = x;
}
}//ok