기본적으로 상속은 부모 클래스가 있고 자식 클래스가 있을 때 부모 클래스에 있는 특정한 변수나 또는 메소드를 자식 클래스가 그대로, 마치 자식 클래스에 정의돼 있는 것처럼 사용할 수 있게 하면서 동시에 자식 클래스에 어떤 특정한 메소드나 변수를 추가해서 부모 클래스가 가진 기능보다 더 많은 기능을 제공한다는 개념이다.
이것 말고도 자식 객체가 좀 더 가치 있는 부품으로 사용되려면 부모가 물려준 메소드 가운데 어떤 메소드는 자식 클래스에서 그 기능을 덮어써서 자식 클래스만의 독자적인 메소드를 정의해야 하는 경우가 있다. 즉, 지금까지 살펴본 상속은 부모 클래스에 어떠한 기능을 더하는 경우였다. 다시 말해, 부모 클래스가 갖고 있지 않은 메소드를 추가하는 측면만 살펴봤는데 이번에 살펴볼 오버라이딩은 부모가 갖고 있는 메소드를 물려받긴 하지만 부모 클래스의 메소드를 그대로 쓰지 않고 자식 클래스의 필요에 따라 메소드를 재정의해서 기능을 변경하는 방법에 해당한다.
package org.opentutorials.javatutorials.overriding.example1;
public class CalculatorDemo {
public static void main(String[] args) {
SubtractionableCalcultor c1 = new SubtractionableCalcultor();
c1.setOperands(10, 20);
c1.sum();
c1.avg();
c1.subtract();
}
}
class Calculator {
int left, right;
public void setOperands(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 SubtractionableCalcultor extends Calculator {
public void sum() {
System.out.println("실행 결과는 " + (this.left + this.right) + "입니다.");
}
public void subtract() {
System.out.println(this.left - this.right);
}
}
'자바' 카테고리의 다른 글
abstract interface (0) | 2020.10.12 |
---|---|
interface가 interface를 implement (0) | 2020.10.12 |
상속 (0) | 2020.10.11 |
소켓 (0) | 2020.09.06 |
URL 클래스 (0) | 2020.09.06 |