참고
[JAVA/자바] 상속에서의 생성자
이전 포스팅에서 상속에 대해서 알아보았다. 상속은 부모 클래스의 메소드 및 필드를 물려받는다고 ...
blog.naver.com
핵심
1. Child의 show()메서드와 print()메서드가 Parent의 show()메서드, print()메서드를 오버라이딩
→ 부모의 print(), show()메서드를 쓰기위해서는 super.print(), super.show()라고 사용해야함.
→ print(), show()는 Child의 메서드를 의미함
→ super.print() 했을 때 출력값
부모 print() 메서드 실행! - 3번
자식 print() 메서드 실행! - 4번
→ System.out.println("부모 print() 메서드 실행! - 3번") 로 "부모 print() 메서드 실행! - 3번" 출력
→ print()는 Child의 print()메서드를 의미 : "자식 print() 메서드 실행! - 4번 출력"
2. 부모클래스의 생성자가 매개변수가 없다면 자식 인스턴스 생성했을 때 부모클래스의 생성자는 자동호출!
→ 매개변수 있는 부모클래스의 생성자는 자동호출되지 않음.
→ new Child("End") 출력값
부모 생성자 호출! - 0번
매개변수 있는 자식 생성자 호출 : End- 0번
→ 부모클래스에 생성자가 2개 있는 경우 : 매개변수 없는 생성자 + 매개변수 있는 생성자
→ new 부모클래스() or 자식 생성자 안의 super() ▷ 매개변수 없는 생상자 호출
→ new 부모클래스("매개변수") or 자식 생성자 안의 super("매개변수") ▷ 매개변수 있는 생상자 호출
→ new 자식클래스() ▷ 매개변수 없는 생성자 호출
3. 부모클래스의 생성자가 매개변수가 있는 생성자만 존재할 경우
→ 매개변수 있는 부모클래스의 생성자는 자동호출되지 않음. 컴파일 에러 발생!
→ 2번의 경우는 매개변수가 없는 생성자가 존재했기 때문에 에러 발생 안함.
→ 이 경우 자식 생성자 안에 super("매개 변수 있는 부모 생성자") 넣어야함.
class Child extends Parent{
Child(){
super("매개변수 있는 부모생성자"); // 자식 생성자 안의 매개변수가 존재하는 부모생성자
System.out.println("자식 생성자 호출! - 1번");
}
Child(String msg){
System.out.println("매개변수 있는 자식 생성자 호출 : " + msg + "- 0번");
}
public void show(){
System.out.println("자식 show() 메서드 실행! - 2번");
super.print();
}
public void print(){
System.out.println("자식 print() 메서드 실행! - 4번");
}
}
예제코드
class Parent{
Parent(){
System.out.println("부모 생성자 호출! - 0번");
}
Parent(String msg){
System.out.println("매개변수 있는 부모 생성자 호출 : " + msg + "- 0번");
}
public void show(){
System.out.println("부모 show() 메서드 실행!");
}
public void print(){
System.out.println("부모 print() 메서드 실행! - 3번");
print();
}
}
class Child extends Parent{
Child(){
System.out.println("자식 생성자 호출! - 1번");
}
Child(String msg){
System.out.println("매개변수 있는 자식 생성자 호출 : " + msg + "- 0번");
}
public void show(){
System.out.println("자식 show() 메서드 실행! - 2번");
super.print();
}
public void print(){
System.out.println("자식 print() 메서드 실행! - 4번");
}
}
public class Main{
public static void main(String[] args){
new Parent("Start");
System.out.println("-------------- 1");
Parent pa = new Child();
pa.show();
System.out.println("-------------- 2");
new Child("End");
}
}
//출력
매개변수 있는 부모 생성자 호출 : Start- 0번
-------------- 1
부모 생성자 호출! - 0번
자식 생성자 호출! - 1번
자식 show() 메서드 실행! - 2번
부모 print() 메서드 실행! - 3번
자식 print() 메서드 실행! - 4번
-------------- 2
부모 생성자 호출! - 0번
매개변수 있는 자식 생성자 호출 : End- 0번
'자격증 > 정보처리기사' 카테고리의 다른 글
[JAVA/자바] 프로그래밍 - static 예제(1) (0) | 2023.10.01 |
---|---|
[JAVA/자바] 프로그래밍 - static (0) | 2023.10.01 |