오버라이딩

doldol_kim·2020년 2월 28일
0

Java-OOP

목록 보기
3/6

오버라이딩은 change, modify의 느낌이다.

'재정의' '새롭게 정의한다' 라는 뜻이며, '상속'과 밀접하게 관련되어 있다.

상속은 부모 클래스의 메소드를 그대로 쓰고, 새로운 메소드를 추가하여 쓰는것 이라면,

오버라이딩은 부모 클래스의 메소드를 필요에 따라 재정의하여 기능을 변경하는 것이다.

부모 클래스도 가지고 있고 자식 클래스도 가지고 있는 메소드를

자식 클래스에서 재정의하고 이 메소드를 호출하면,

부모 클래스가 가진 메소드는 무시되고 자식 클래스가 가진 메소드가 실행된다.

오버라이딩의 조건

부모 클래스가 가진 메소드의 반환 타입이 void 이면 이를 상속받아 오버라이딩 하는 메소드 또한 반환 타입이 void여야 한다.

또한 메소드의 이름도 같아야 하며, 메소드에 매개변수가 있을 경우, 매개변수의 개수도 같아야 하고, 그 매개변수는 타입도 같아야한다.

오버라이딩의 조건을 정리하자면

  • 메소드의 이름
  • 메소드 매개변수의 개수, 데이터 타입, 순서
  • 메소드의 반환타입

위의 세가지 항목이 부모 클래스, 자식 클래스에서 모두 같아야 오버라이딩이 가능하다.

만일, 부모 클래스에 정의된 메소드에서 수정이 발생하면, 자식 클래스에서도 수정을 해주어야 한다. 이때 자식 클래스에서 super 키워드를 사용하면, 수정된 부모 클래스의 메서드를 사용할 수 있다.

package pr01;

class Calculator {
    int left, right;
    public Calculator(){

    }
    public Calculator(int a, int b){
        this.right=a;
        this.left=b;
    }
    public void sum(){
        System.out.println(this.left+this.right);
    }
    public int avg(){
        return ((this.left+this.right)/2);
    }
}

class Subtract extends Calculator{
    public Subtract(int a, int b) {
        this.left=a;
        this.right=b;
    }
    public void sub(){
        System.out.println(this.left-this.right);
    }
    @Override
    public void sum(){
        System.out.println("실행결과는 "+(this.left+this.right)+" 입니다");
    }
    @Override
    public int avg() {
        return super.avg();
    }
}

public class test {
    public static void main(String[] args) {
        Subtract s1 = new Subtract(10,20);
        s1.sum();s1.avg();s1.sub();

    }
}
/*
실행결과는 30 입니다
15
-10
*/
profile
김돌돌입니다

0개의 댓글