상속에서 사용되는 오버라이딩(overriding)과 클래스에서 메소드를 만들 때 사용되는 오버로딩(overloading)은 이름이 비슷하여 햇갈릴 수 있다.
오버로딩 overloading
- 한 클래스 내에서만 사용된다.
- 메소드의 이름이 동일하지만 매개변수의 순서, 개수, 타입 등의 요소 중 한개이상 달라야 한다.
오버라이딩 overriding
- 상속관계에서 사용되는 개념이다.
- 부모로부터 상속받는 메소드를 재정의하는 의미를 지닌다.
- 메소드의 이름이 같고 매개변수의 순서, 개수, 타입 등의 요소 모두 같아야 한다.
- 접근제한이 부모의 메소드보다 강력해서는 안된다.(같거나 낮아야 한다)
class A{
public void M(){
System.out.println("부모");
}
}
class B extends A{
}
public class Main{
public static void main(String[] args){
B objB = new B();
objB.M();
}
}
출력 : 부모
class B 가 class A로부터 상속받았다.
class A{
public void M(){
System.out.println("부모");
}
}
class B extends A{
public void M(){
System.out.println("자식");
}
}
public class Main{
public static void main(String[] args){
B objB = new B();
objB.M();
}
}
출력 : 자식
class B 가 class A로부터 상속받았다.
class B 가 부모의 메소드인 M()을 오버라이딩하여 출력 값이 "자식" 으로 나오는 것을 볼 수 있다.
class A{
public void M(){
System.out.println("부모");
System.out.println("부모");
}
}
class B extends A{
public void M(String s){
System.out.println("자식");
}
}
public class Main{
public static void main(String[] args){
B objB = new B();
objB.M("");
objB.M();
}
}
출력 :
자식
부모
부모
자식 class인 class B는 부모로부터 같은 이름의 메소드인 M()을 오버라이딩 한 것처럼 보이지만 class B는 자신만의 메소드인 M(String s)를 새롭게 만든것으로 해석해야 한다.
위 코드는 오버라이딩, 오버로딩 둘다 하지 않은 것으로 봐야한다.
자식의 메소드 M(String s)는 부모 클래스와 독립적으로 떨어져 있기 때문에 같은 클래스 내에서 메소드의 이름이 같아야 하는 오버로딩의 조건을 만족하지 못하기 때문이다.
'Java' 카테고리의 다른 글
소수 판별 & 상속 (0) | 2022.10.21 |
---|---|
상속 (0) | 2022.10.19 |
자바 - 기타 제어자 (0) | 2022.05.25 |
자바 - 메소드 오버로딩 (0) | 2022.05.24 |
자바 - 기본 생성자 (0) | 2022.05.17 |
댓글