Java overriding

별의개발자커비·2023년 2월 15일
0

Java

목록 보기
40/66
post-thumbnail
class Calculator {
    int left, right;

    public void setOprands(int left, int right) {
        this.left = left;
        this.right = right;
    }

    public void sum() {
        System.out.println(this.left + this.right);
    }

    public void avg() {
        System.out.println((this.left + this.right) / 2);
    }
}

class SubstractionableCalculator extends Calculator {

    public void sum() {
        System.out.println("실행 결과는 " +(this.left + this.right)+"입니다.");
    }

    public void substract() {
        System.out.println(this.left - this.right);
    }
}

class Main {

    public static void main(String[] args) {
        SubstractionableCalculator c1 = new SubstractionableCalculator();
        c1.setOprands(10, 20);
        c1.sum();
        c1.avg();
        c1.substract();
    }
}
  • 결과

    	실행 결과는 30입니다.
    	15
    	-10
  • c1.sum이 상위 클래스의 메소드가 아니라 하위 클래스의 메소드 sum을 실행
    = 하위 클래스의 메소드가 더 높은 우선순위를 갖고 있다.
  • 이것을 메소드 오버라이딩(overriding)이라고 한다.

1. 메소드 오버라이딩(overriding)

하위 클래스에서 상의 클래스와 동일한 메소드를 정의하면 부모 클래스로부터 물려 받은 기본 동작 방법을 변경하는 효과를 갖게 된다. 기본동작은 폭넓게 적용되고, 예외적인 동작은 더 높은 우선순위를 갖게하고 있다.

2. 오버라이딩: 부모, 자식 메소드 signature 동일해야 쓸 수 있음

오버라이딩을 하기 위해서는 아래의 조건을 충족시켜야 한다.

  • 메소드의 이름
  • 메소드 매개변수의 숫자와 데이터 타입 그리고 순서
  • 메소드의 리턴 타입
    = 위와 같이 메소드의 형태를 정의하는 사항들을 통털어서 메소드의 서명(signature)이라 한다.
class Calculator {
    int left, right;

    public void setOprands(int left, int right) {
        this.left = left;
        this.right = right;
    }

    public void sum() {
        System.out.println(this.left + this.right);
    }

    public int avg() {
				return ((this.left + this.right) / 2) ;
    }
}

class SubstractionableCalculator extends Calculator {

    public void sum() {
        System.out.println("실행 결과는 " +(this.left + this.right)+"입니다.");
    }

    public int avg() {
		return super.avg() ; // super = 현재 클래스의 부모 클래스 의미
			}

    public void substract() {
        System.out.println(this.left - this.right);
    }
}

class Main {

    public static void main(String[] args) {
        SubstractionableCalculator c1 = new SubstractionableCalculator();
        c1.setOprands(10, 20);
        c1.sum();
        System.out.println("실행 결과는" + c1.avg());
        c1.substract();
    }
}
  • 자식 클래스가 부모 클래스의 메소드 avg와 같은 로직의 메소드를 갖고 싶을 때 방법
    • super(= 현재 클래스의 부모 클래스 의미).avg 처럼 쓴다.

0개의 댓글