Overload (오버로드)
동일한 이름의 메소드를 여러 개 정의해서 사용하는 방법. 메소드를 한 공간 위에 계속 쌓는다는 느낌. 매개변수의 유형이나 개수 등을 다르게 만들어 다양하게 호출될 수 있도록 한다. 메소드를 여러 기능으로 만들 때 유용하다. 개발자의 편의를 위한 기능이라고도 볼 수 있을 것 같다.
public class Cal {
int plus(int a, int b) {
return a+b;
}
int plus(int a, int b, int c) {
return a+b+c;
}
}
Override (오버라이드)
상속 관계를 갖는 상위 클래스의 메소드를 하위 클래스에서 재정의하여 사용하는 방법. 메소드를 위에 덧 쓰는 (Over Writing?) 느낌. 상위 클래스의 메소드를 하위 클래스에서 재정의하여 사용할 때 사용한다. 아래 코드처럼 @Override 어노테이션을 추가하면 해당 메소드가 오버라이드 할 수 있는 메소드인지 검사하여 불가능한 경우는 관련 오류를 출력한다.
class Animal {
public void move() {
System.out.println("동물이 움직입니다.");
}
}
class Dog extends Animal {
@Override
public void move() {
System.out.println("강아지가 움직입니다.");
}
}
class Cat extends Animal {
@Override
public void move() {
System.out.println("고양이가 움직입니다.");
}
}