JAVA
오버로딩(Overloading), 오버라이딩(Overriding)
🤖 Play with Android 🤖
2021. 7. 1. 14:22
728x90
오버로딩(Overloading) 이란 쉽게 말해서 '과적하다' 라는 말이다.
오버로딩은 상속과는 관계가 없다.
중요한 것은 생성자의 매개변수의 유형과 개수가 다르게 하여 같은 이름의 생성자를 여러 개 가질 수 있다. 라는 것이다.
class Cal {
public int sum(int v1, int v2) {
return v1 + v2;
}
// 매개변수의 수를 다르게 하여 같은 이름의 메소드를 또 만들 수 있다.
public int sum(int v1, int v2, int v3) {
return v1 + v2 + v3;
}
// 매개변수의 형태를 다르게 하여 같은 이름의 메소드를 만들 수도 있다.
public String sum(String x1, String x2){
return x1 + x2;
}
}
오버라이딩(Overriding) 이란 부모가 가진 기능을 더 멋지게 보태서 새롭게 "재정의" 하는 것이다.
오버라이딩이란 메소드의 동작만을 재정의하는 것이므로, 메소드의 선언부는 기존 메소드와 완전히 같아야 한다.
하지만 메소드의 반환 타입은 부모 클래스의 반환 타입으로 타입 변환할 수 있는 타입이라면 변경할 수 있다.
class Cal {
public int sum(int v1, int v2) {
return v1 + v2;
}
// 매개변수의 수를 다르게 하여 같은 이름의 메소드를 또 만들 수 있다.
public int sum(int v1, int v2, int v3) {
return v1 + v2 + v3;
}
// 매개변수의 형태를 다르게 하여 같은 이름의 메소드를 만들 수도 있다.
public String sum(String x1, String x2){
return x1 + x2;
}
class Cal3 extends Cal{
public int sum(int v1, int v2) {
System.out.println("override!!!"); // 부모의 sum메소드를 새로운 기능을 넣어 재정의
return v1 + v2;
}
}
}
만약 부모메소드도 사용하고 싶으면서 오버라이딩을 통해 재정의하고 싶을 때는 어떻게 할까?
그럴때는 super 를 써주면 된다. super 키워드를 사용하여 자식 클래스에서 부모클래스의 메소드를 호출해준다.
class Cal {
public int sum(int v1, int v2) {
System.out.println("I'm Mom");
return v1 + v2;
}
// 매개변수의 수를 다르게 하여 같은 이름의 메소드를 또 만들 수 있다.
public int sum(int v1, int v2, int v3) {
return v1 + v2 + v3;
}
// 매개변수의 형태를 다르게 하여 같은 이름의 메소드를 만들 수도 있다.
public String sum(String x1, String x2){
return x1 + x2;
}
}
class Cal3 extends Cal{
public int sum(int v1, int v2) {
super.sum(v1, v2);
System.out.println("override!!!"); // 부모의 sum메소드를 새로운 기능을 넣어 재정의
return v1 + v2;
}
}
간단히 정의하면 오버로딩(overloading)은 새로운 메소드를 정의하는 것이다.
하지만 오버라이딩(overriding)은 상속받은 기존의 메소드를 재정의하는 것이다.