생성자는 객체 생성 시 자동으로 호출되는 메서드입니다.
하지만 생생자는 일반적인 메서드와는 달리 "상속이 불가능" 합니다. 이에 따라 상속받은 클래스는 생성자를 매번 "재정의" 해주어야 합니다.
그렇다면 여러분은 상속받은 클래스가 생성자를 재정의하는 것을 보신적이 있으신가요?
아마 많이 보지 못했을 겁니다.
부모 클래스의 생성자가 "매개변수가 없다면 자식 클래스의 생성자는 생략이 가능" 하기 때문이죠.
public class Parent {
//부모 생성자
public Parent() {
System.out.println("constructor");
}
}
public class Me extends Parent{
public void say() {
System.out.println("hello");
}
}
public class Main {
public static void main(String[] args) {
Me me = new Me(); //constructor
me.say(); //hello
}
}
위와 같이 자식 클래스에서 따로 생성자를 재정의하지 않아도 자동적으로 부모 생성자가 호출되는 것을 보실수 있습니다.
반대로 매개변수가 존재하는 부모 클래스의 생성자의 경우는 생략이 불가능 합니다.
public class Parent {
//부모 생성자
public Parent(String constructor) {
System.out.println(constructor);
}
}
public class Me extends Parent{
//자식 생성자 재정의
//생략하면 에러
public Me(String constructor) {
super(constructor);
}
public void say() {
System.out.println("hello");
}
}
public class Main {
public static void main(String[] args) {
Me me = new Me("constructor"); //constructor
me.say(); //hello
}
}
부모 생성자는 새로운 매개변수를 받아으며 자식 생성자에서 이를 생략하려고 하자 에러가 납니다.
따라서 "부모 생성자의 매개변수가 있는 경우 반드시 자식 생성자를 명시"해줘야 합니다.
'Java > Grammer' 카테고리의 다른 글
String Class (3) - 정규표현식 (0) | 2022.04.02 |
---|---|
String Class (2) - 주요 메서드 (0) | 2022.03.27 |
String Class (1) - Immutable과 StringBuilder/StringBuffer (0) | 2022.03.26 |
추상클래스와 인터페이스의 차이 (0) | 2022.01.16 |
Call by value (0) | 2021.12.28 |