[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 (주의 : 수퍼 클래스라는 의미가 아니다.)

- 수퍼 클래스의 메서드를 재정의할 때 기존 코드를 복사/붙여넣기 하는 대신

  재정의하기 전의 기존 메서드를 호출하는 것이 편하다. 재정의 하기 전의 메서드를

  가리키기 위해 super 라는 키워드를 사용하여 메서드를 호출한다.



* 참고

오버로딩 (overloading)

- 클래스 내에 동일한 이름을 가진 메서드를 여러 개 만들어 파라미터의 개수만 달리

  하는 방법이다

- 메서드의 일관성을 유지하는 것이 목적이다.



블로그 이미지

필로그래머

,