자바의 정석 - 기초편

오버라이딩

ODaram 2022. 8. 17. 10:57

▶(메서드) 오버라이딩 (overriding)

 - 상속받은 조상의 메서드를 자신에 맞게 변경하는 것

class Point {        // 2차원 좌표
      int x;       // 위치
      int y;
      string getlocation() {
           return "x:" + x + ", y :" + y;              // 점의 위치값을 문자열로 만들어서 반환하는 getlocation 메서드
      }
}

class Point3D extends Point {   // 3차원 좌표상의 한 점
   int z;
   string getlocation() {  // 오버라이딩
          return "x:" + x + ", y :" + y + ", z :" + z;    // 선언문변경 불가,  내용(구현부.{})만 변경 가능
    }
}

 

▶오버라이딩의 조건

 1. 선언부가 조상 클래스의 메서드와 일치해야 한다.

 class Point {
      int x;
      int y;
      string getlocation() {           // 선언부 (반환타입, 메서드 이름, 매개변수 목록)
            return "x : " + x + ", y : " + y;
      }
 }
class Point3D extends Point {
      int z;
      string getlocation() {        // 오버라이딩                    // (선언부와 일치해야함)
           return "x :" + x + ", y :" + y + ", z :" + z;
      }
}

 

 2. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.

     ( 접근 제어자 : Public, Protected, (default), Private )

 

3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.

class Parent {
     void parentMethod() throws IOException SQLException {   // 예외선언 1. IOException  2. SQLException
            . . . 
      }
}
class Child extends Parent {
     void parentMethod() throws IOException {    //  예외선언 1. IOException  2. 선언불가  3. X 선언불가 
            .  .  . 
      }      
    .  .  .
}

 

▶오버로딩 Vs. 오버라이딩 

      오버로딩 (overloading) : 기존에 없는 새로운 메서드를 정의하는 것 (이름이 같은) (new)

             -> 상속 관계 X

      오버라이딩(overriding) : 상속받은 메서드의 내용을 변경하는 것 (change, modify)

             -> 상속 관계 O

class Parent {
     void parentMethod() {}
}
class Child extends Parent {
     void parentMethod() {}              // 오버라이딩
     void parnetMethod(int i) {}        // 오버로딩 (메서드를 매개변수만 다르게해서 정의함) 

     void childMethod() {}                // 메서드 정의
     void childMethod(int i) {}           // 오버로딩 (이름만 같은 메서드를 새로 만듬)
     void childMethod() {}                 // 중복정의. 에러
]

'자바의 정석 - 기초편' 카테고리의 다른 글

패키지, 클래스 패스  (0) 2022.08.23
참조변수 super, 생성자 super()  (0) 2022.08.22
단일상속, Object클래스  (0) 2022.08.17
클래스 간의 관계, 상속과 포함  (0) 2022.08.16
상속  (0) 2022.08.16