[Java] 자바 오버라이딩 (overriding)과 super 키워드
오버라이딩 (overriding)
- 수퍼 클래스 (super cass)의 메서드를 재정의 하는 방법
- 서브 클래스의 조건에 맞춰서 기능을 바꾸는 것이 목적이다.
수퍼 클래스 예제
public class Student {
String name;
int age;
void print() {
//원칙 System.out.printf("이름 : %s\n", Student.this.name);
System.out.printf("이름 : %s\n", name);
System.out.printf("나이 : %d\n", age);
}
}
서브 클래스 예제
public class BitStudent extends Student{
String school;
void print() {
// 수퍼 클래스의 메서드를 재정의 할 때
// 기존 코드를 복사/붙여넣기 하는 대신
// 재정의하기 전의 기존 메서드를 호출하는 것이 편하다.
/*
System.out.printf("이름: %s\n", name);
System.out.printf("나이: %d\n", age);
*/
// 재정의 하기 전의 메서드를 가리키기 위해
// (주의! 수퍼 클래스라는 의미가 아니다!)
// super라는 키워드를 사용하여 메서드를 호출한다.
super.print(); // 이 메서드를 재정의하기 전의 메서드를 호
System.out.printf("학교: %s\n", school);
}
}
호출 코드
public static void main(String[] args) {
BitStudent s = new BitStudent();
s.name = "홍길동";
s.age = 20;
s.school = "비트대학교";
s.print();
}
- 수퍼 클래스의 메서드를 재정의할 때 기존 코드를 복사/붙여넣기 하는 대신
재정의하기 전의 기존 메서드를 호출하는 것이 편하다. 재정의 하기 전의 메서드를
가리키기 위해 super 라는 키워드를 사용하여 메서드를 호출한다.
* 참고
오버로딩 (overloading)
- 클래스 내에 동일한 이름을 가진 메서드를 여러 개 만들어 파라미터의 개수만 달리
하는 방법이다
- 메서드의 일관성을 유지하는 것이 목적이다.
'Programming > java' 카테고리의 다른 글
[Java] 랩퍼(wrapper) 클래스와 boxing / unboxing (2) | 2017.05.12 |
---|---|
[Java] Object 클래스 - toString() 메서드의 재정의 예제 (0) | 2017.05.12 |
[Java] 상속 (inheritance)과 Object 클래스 (0) | 2017.05.12 |
[Java] String[] args (프로그램 아규먼트)란 무엇인가? (0) | 2017.05.11 |
[Java] 문자열 (String)과 상수 문자열 (String) 그리고 equals() 메서드 (0) | 2017.05.11 |