Override는 메소드를 재정의하는 행위를 뜻한다.
보통 상위클래스를 상속받고 상위클래스의 메소드를 재정의할때 사용한다.
이 경우 @Override
어노테이션을 생략이 가능하다.
근데 저 짧은 어노테이션 하나로 상위클래스에 같은 메소드를 시그니쳐를 가지고 있다!
라는 것을 알려주는데 굳이 생략할 필요가 있을까..?
생략이 가능하기에 어느날 상위클래스에서 해당 메소드가 사라져도 에러가 안날 것이다..
곧 자식클래스만의 메소드로 남게 될 것이며 이로 인해 프로그램에서 뜻하지 않은 버그가 생겨날 여지가 있다고 생각하기에 @Override
는 왠만하면 생략하지 않는 것이 좋을 것같다.
비슷하게 메소드 Overload 도 있다.
같은 메소드이름으로 파라미터를 다르게 설정한다면 Overload 할 수 있다.
class Parent {
public void hello(String name) {
System.out.println("안녕하세요, 저는 " + name + "입니다.");
}
}
class Child extends Parent {
// @Override 사용불가
public void hello() {
System.out.println("안녕!");
}
}
부모클래스와 자식클래스의 hello
메소드는 파라미터가 다르기에 사실 상 다른 기능을 하는 메소드이다.
이 경우 Overload 이기에 @Override
어노테이션을 사용할 수 없다.
하지만 메소드 시그니쳐를 동일하게 바꾼다면 @Override
를 사용할 수 있다.
(생략도 가능하다.)
class Parent {
public void hello(String name) {
System.out.println("안녕하세요, 저는 " + name + "입니다.");
}
}
class Child extends Parent {
@Override // 생략가능
public void hello(String name) {
System.out.println("안녕! " + name + "!");
}
}