본문 바로가기

프로그래밍/Java (기초)

overriding

반응형


오버라이딩(overriding)

두 클래스가 서로 상속의 관계에 있을때, 자식클래스(하위)가 부모클래스(상위) 클래스의 메소드를 사용할때,

하위 클래스가 상위 클래스의 메소드를 그대로 사용하게 되는데, 이러한 제약을 없애주는 것이.. 메소드 오버라이딩(method overriding)이라 한다 



즉 하위 클래스에서 상위 클래스에 선언된 메소드를 변형시키거나 새로운 기능들을 추가 할수 있게 된다.




  • 메소드의 이름
  • 메소드 매개변수의 숫자와 데이터 타입 그리고 순서
  • 메소드의 리턴 타입


오버라이딩의 조건(메소드 시그니처(method signature))


- 메소드의 이름

- 메소드의 매개변수의 숫자와 데이터 타입과 순서

- 메소드의 리턴 타입


이중 하나라도 만족하지 않을 경우 에러가 발생한다.




요약


상속의 관계에서, 같은 메소드이름을 가지지만, 매개변수가 다른 형태


class A{

public sum(int a, int b){

int result;

result = this.a + this.b;

return result;

}

class B extends A{

public sum(double a, double b){

int result; 

result = this.a + this.b;

return result;

}

}

public static void main(String[] args) {

        

     // 객체 생성

     Object A = new A();

     

     // 변수 설정   

     A.sum(8.5, 10.1);     // A클래스의 sum은 파라미터 타입이 int이므로 에러가 발생해야 한다.

    }


}


결과 : 18.6


-> A를 상속받는 B클래스에서 같은 메소드 이름의 sum을 오버라이드하였고

B에서 오버라이드된 sum메소드는 Double 타입의 파라미터를 받고 있다.

이때 A.sum(8.5, 10.1); 은 오버라이드된 B.sum()으로 실행되어 에러가 발생하지 않고

합계를 구하여 결과값을 반환해주게 된다.




B클래스는 A클래스를 상속받는다.

A,B클래스는 서로 같은 sum이라는 메소드를 가지고, 완벽하게 똑같은 동작을 한다.

하지만 A클래스의 메소드는 int타입만을 매개변수로 가지고

B클래스의 메소드는 double타입만을 매개변수로 가진다.


이러한 형태를 오버라이딩이라 한다.


반응형

'프로그래밍 > Java (기초)' 카테고리의 다른 글

객체지향 프로그래밍  (1) 2016.04.13
overloading  (1) 2016.03.28
인터페이스(interface)  (0) 2016.03.26
상속(inheritance)  (0) 2016.03.26
초기화와 생성자(Constructor), this, super  (0) 2016.03.26