코드 재사용성 증가 (모듈화 할 생각을 하면 좋다)
유지보수 용이
세상모든 자식클래스는
생성자의 첫줄에 super() 메서드를 호출함!
-> 생략되어있음
super(1234); 부모생성자와 인자를 맞춰줌
package class02;
class A {
int a;
A() {
}
A(int a){ //기본 생성자를 일반 생성자로 바꿔 버려서 자식 클래스에서 호출이 안됨
this.a=a;
System.out.println("A() 생성자 호출완료!"); //A 생성자 만들자 마자 자식클래스 B에서 에러가 남
}
void funcA() {
System.out.println("a= "+this.a);
}
}
// 부모클래스에서 생성자를 만들었는데 왜 자식클래스에 에러가 발생 했을까?
class B extends A{ //
int b;
B(int b) { //자식 클래스 생성자를 만들자 class에 있던 빨간줄 오류가 생성자 수준으로 넘어옴 //
super(); //숨겨져 있던 코드; 직접 명시하자 마자 인자부분에 있던 에러가 super로 넘어옴.
// super() -> 생성자 -> 클래스 // 원래는 super에 에러가 super가 명시 안될 때 생성자에 있었고 생성자가 없을때는 막연하게 클래스 부분에 표시를 해 주고 있었음
this.b=b;
//super() ==>> this()와 유사
//this() : 자기자신클래스의 생성자
//super() : 자신의 부모클래스의 생성자를 의미함
}
void funcB() {
System.out.println("b= "+this.b);
}
}
public class Test01 {
public static void main(String[] args) {
A aaa = new A(); // 객체와(인스턴스화)
aaa.a=10; // aaa =-> a, funcA() //생성자 없으니 직접 멤버변수 초기화
B bbb = new B(123); // 인스턴스화를 함으로써 bbb라는 객체 생성 // bbb -> a, b, funcA(),funcB()
//bbb라는 자식 클래스의 객체는 부모의 것을 가질수 있다 -> a, b, funcA(),funcB()
bbb.a=22; // bbb를 초기화를 하면 나옴
bbb.b=20; // aaa.a 와 다른 객체이기 때문에 서로에게 영향을 주지 않음.
aaa.funcA();
System.out.println("----------------");
bbb.funcA(); // 0이나옴 초기화를 안함
bbb.funcB();
}
}