상속받은 조상의 메서드를 자신에 맞게 변경하는것입니다.
class Point2d {
int x;
int y;
void coordinate_print() {
System.out.println("현재좌표는 " + "x:" + x + ", y:" + y);
}
} // 2차원 좌표 객체
class Point3d extends Point2d {
int z;
@override
void coordinate_print() {
System.out.println("현재좌표는 " + "x:" + x + ", y:" + y + ", z:" + z);
}
} // 2차원 좌표를 상속받은 3차원 객체
public class Main {
public static void main(String[] args) {
Point3d p = new Point3d();
p.x = 2;
p.y = 1;
p.z = 3;
p.coordinate_print();
}
}
자식 클래스에서는 해당 메소드의 구현부를 개선하거나 변경할 수 있습니다. 이를 메소드 오버라이딩이라고 합니다. 이렇게 함으로써 상속을 사용하는 클래스는 기존의 기능을 재사용할 수 있으며 !!확장!! 이 용이해집니다.
컴파일 시에 JUnit 기능을 사용하여 문법 검사를 진행할 수 있습니다.
메소드를 오버라이딩하기 위해서는 부모 클래스의 메소드 이름과 매개변수를 동일하게 가져와야 합니다. 그러나 오버라이딩에 실패하는 경우가 있을 수 있습니다. 이런 상황을 방지하기 위해 @Override 어노테이션을 사용하여 컴파일러에게 "이 메서드는 오버라이드된 메서드입니다!" 라고 알리면, 컴파일 과정에서 오버라이딩이 제대로 이루어졌는지 확인할 수 있습니다.
두 이름이 비슷하고 둘다 객체지향에서 사용되는 개념이기에 많이 헷갈리는 경우가 있습니다.
오버로딩 - 같은 이름을 가지지만 매개변수가 다른 여러 메서드를 정의하는 것입니다. 이러한 메서드들은 기존 메서드와는 별개의 새로운 기능을 제공합니다. 오버로딩을 통해 매개변수의 종류와 개수에 따라 다양한 동작을 수행할 수 있는 유연성을 제공합니다.
오버라이딩 - 오버라이딩은 상속받은 메서드의 구현부를 변경하는 과정입니다. 이는 기존의 부모 클래스에서 제공하는 기능을 자식 클래스가 수정하거나 확장하고자 할 때 사용됩니다.
