Overriding
- Runtime polymorphism
- Parent class 또는 superclass에서 이미 정의되어 있는 method를 구체적으로 구현하기 위해 사용된다.
- 상속 관계에 있는 2개의 class에서 발생한다.
즉, overriding에는 항상 inheritance가 성립되어야 한다.
- Parent와 Child class의 method 이름, parameter의 개수, parameter type이 동일해야 한다.
- Method의 return type도 동일해야 한다.
Example
class Dog {
public void bark() {
System.out.println("woof");
}
}
class Hound extends Dog {
public void bark() {
System.out.println("bowl");
}
}
Overloading
- Compile-time polymorphism
- 하나의 class 안에서 같은 이름을 가진 method가 2개 이상일 때 발생한다.
- 상속이 꼭 필요한 것은 아니다.
- Method들의 name은 동일하되, parameter의 개수나 type은 달라야 한다.
- Return type은 같을 수도, 같지 않을수도 있다.
- Methods가 동일한 이름을 가지고 있더라도 parameter 등 method signature가 다르기 때문에, compiler는 각 method를 다른 것으로 인식한다.
Example
class Dog {
public void bark() {
System.out.println("woof");
}
public void bark(int num) {
for (int i = 0; i < num; i++) {
System.out.println("woof");
}
}
}
Reference
Overloading vs. Overriding