하위 클래스가 부모 클래스의 기본적인 동작방법을 변경하는 것
ex )
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 {
//overriding 재정의
public void sum() {
System.out.println("실행 결과는 " +(this.left + this.right)+"입니다.");
}
public void substract() {
System.out.println(this.left - this.right);
}
}
public class CalculatorDemo {
public static void main(String[] args) {
SubstractionableCalculator c1 = new SubstractionableCalculator();
c1.setOprands(10, 20);
c1.sum();
c1.avg();
c1.substract();
}
}
오버라이딩의 조건
- 메소드의 이름
- 메소드 매개변수의 숫자와 데이터 타입 그리고 순서
- 메소드의 리턴타입
public void avg() {
System.out.println((this.left + this.right) / 2);
}
위에는 void 형이지만 아래는 int 형이라 오류 발생
public int avg() {
return (this.left + this.right)/2;
}
만약 부모 클래스와 자식 클래스의 메소드가 중복이라면
자식 메소드의 리턴을 부모 메소드로 변경한다.
public int avg() {
return super.avg();
}