서로 헷갈리는 단어이다.
여기서 더 자세히 설명하면 더 헷갈리니까,
바로 분리해서 각각 알아보자.
오버로딩은 사전적으로 '과적하다'라는 의미다.
자바에서 오버로딩은 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라고 매개변수의 개수 또는 반환 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다.
오버로딩의 조건은 다음과 같다.
주의할 점은 '리턴 값'만 다른 것은 오버로딩 할 수 없다.
class Test{
// 1번
private void print(){
System.out.println("와우1");
}
// 2번
private int print(int num){
System.out.println("와우" + num);
return num;
}
// 3번
//이건 안된다는 뜻이다. 2번과 리턴 값만 다르기 때문이다.
private int print(int num){
System.out.println("와우" + num);
return 0;
}
}
오버라이딩은 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의 하는것이다.
상속받은 메소드를 그대로 사용할 수 있지만, 자식 클래스에서 상황에 맞게 변경해야 하는 경우 오버라이딩이 필요하다.
오버라이딩을 하고자 하는 메소드는 다음과 요소들이 같아야 한다.
위 세 가지가 모두 같아야 오버라이딩을 할 수 있다.
class Person{
void cry(){
System.out.println("운다");
}
}
class Child extends Person{
@Override
protected void cry(){
System.out.println("겉으로 운다");
}
}
class Adult extends Person{
@Override
protected void cry(){
System.out.println("속으로 운다"):
}
}
여기서 @Override
는 어노테이션으로 직역하면 주석이라는 것이다.
일반적인 주석과 달리 검증하는 기능을 한다.
@Override
는 오버라이딩을 검증하는 기능을 한다.
위의 코드에서 접근 제어자를 다르게 설정해 놓았는데, 오버라이딩은 접근 제어자를 설정하는 규칙이 존재한다.
규칙은 다음과 같다.
이상으로 Overloading 과 Overriding에 대해 알아보았다.
헷갈리지 않도록 숙지하도록 하자.
끝!