반응형
1. super키워드란?
- 자식클래스의 메소드에서 부모클래스의 객체를 저장하기 위한 숨겨진 매개변수
- this키워드 = 자신의 객체 super키워드 = 부모의 객체
- super 키워드로 자식클래스의 메소드에서 부모클래스의 객체필드 또는 메소드에 접근이 가능
- 하지만 super 키워드를 사용하지 않아도 자식클래스의 메소드에서는 부모 클래스 객체의 필드 또는 메소드를 사용할 수 있음
2. 뭐?? this를 썼는데, 자동으로 super로 변환이 된다구??
- 자식클래스의 메소드 내부에서 this 키워드로 자식클래스 객체의 필드 또는 메소드를 참조하고,
- 만약 참조할 필드 또는 메소드가 없는 경우,
자동으로 super 키워드로 부모클래스 객체의 필드 또는 메소드를 참조
3. super 사용 예시
//자식클래스에서 작성됨
public void display() {
//System.out.println("아이디 = " +super.getId()); //super생략가능
System.out.println("아이디 = " +getId());
System.out.println("이메일 = " +getName());
System.out.println("이메일 = "+email);
}
public void display() {
super.display(); //(부모)의 메소드 호출
display(); //error, 무한루프 : (자식)의 메소드 호출 - 알고리즘에는 재귀호출이 가능하지만, 자바에서는 무한루프!!
}
public void display() {
this.onePlusOne();
//super.onePlusOne(); //자식클래스 내 참조할 메소드가 없다면 자동으로 부모클래스 참조, super쓰지 않아도 됨
}
4. super 키워드를 사용해야 하는 경우
1. 자식클래스의 생성자에서 부모클래스의 생성자를 호출하기 위해
- (가장중요!)
전제조건
- 부모클래스에는 기본생성자가 이미 생성되어있어야만 super() 메소드 사용가능
- 부모클래스의 생성자를 호출하는 명령 전에 다른 명령을 작성하면 에러 발생
형식
- super(값, 값, ...);
예시
//1. 자식클래스에서 기본생성자 호출 시,
//부모클래스super 매개변수에 값 전달이 없기 때문에 생략 가능
public MemberEvent() {
//기본생성자를 호출하는 명령 생략 가능
//super(); 부모클래스의 기본생성자 호출하는 명령 - 부모클래스의 객체가 생성
}
//2. 자식클래스에서 매개변수가 있는 생성자 호출 시,
//부모클래스 super매개변수에 값을 전달하여 프로그램에서 부모와 자식이 연결된 객체를 생성과 초기화됨
public MemberEvent(String id, String name, String email) {
super(id,name);
this.email = email;
}
//3. error - 생성자를 호출하는 명령은 항상 첫번째 명령이어야함
public MemberEvent(String id, String name, String email) {
//System.out.println(); //error
super(id,name);
this.email = email;
}
2. 자식클래스의 메소드에서 부모클래스의 숨겨진 메소드(Hide Method)를 호출하기 위해
- 그렇다면 부모클래스의 메소드는 대체 왜 숨겨졌을까?
- 자식클래스에서 부모클래스의 메소드를 재선언 하였기 때문에
- 즉, 메소드오버라이드 되었기 때문에 숨겨짐
형식
- super.메소드명(값,값,...);
예시
//자식클래스 MemberEvent클래스에서..
//메소드 오버라이드
public void display() {
System.out.println("아이디 = " +getId());
System.out.println("이메일 = " +getName());
System.out.println("이메일 = "+email);
}
//위와 같은 뜻의 메소드 오버라이드
@Override
public void display() {
// super 키워드로 부모클래스의 숨겨진 메소드를 호출
super.display(); //아이디와 이름을 출력하는 메소드
//display(); //error 재귀호출, 무한루프
System.out.println("이메일 = " + email);
}
반응형
'java > inheritance' 카테고리의 다른 글
[inheritance] 6. 학원인적자원관리 ERP프로그램 (AcademyApp) (2) | 2024.04.23 |
---|---|
[inheritance] 5. 메소드 오버라이드(Method override) (0) | 2024.04.22 |
[inheritance] 3. 참조변수와 객체와의 관계 (0) | 2024.04.21 |
[inheritance] 2. 포함관계예시 VS 상속관계예시 (0) | 2024.04.20 |
[inheritance] 1. 객체 간의 관계 (2) | 2024.04.20 |