Overloading vs Overriding
2022. 7. 22. 11:51ㆍJava
오버로딩
파라미터가 다른 같은 이름의 메서드를 생성 가능하게 합니다.
C에서는 다음과 같이 이름이 같은 함수는 사용 불가능합니다.
// C의 경우
int sum(int a, int b){
return a+b;
}
long sum(long a, long b) { //오류 발생
return a+b;
}
이는 C언어에서 함수를 구분할 때, 이름에 따라 구분하기 때문에
sum()을 호출할 때, long sum()을 호출하는지 int sum을 호출하는지에 대해 구분할 수 없기 때문입니다.
자바에서는 함수를 이름+매개변수로 구분합니다.
// java의 경우
int sum(int a, int b){
return a+b;
}
long sum(long a, long b) { // long sum과 int sum은 매개 변수의 타입이 다르므로 다른 함수!
return a+b;
}
두 개 이상의 함수가 같은 리턴 타입, 같은 이름을 사용하더라도, 입력받는 매개 변수의 타입과 갯수가 다르다면
같은 이름을 허용하는 것이 오버로딩입니다.
오버라이딩
상속받을 때 부모가 가지고 있는 메서드를 특정한 형태로 구현합니다.
아래처럼 Car클래스를 상속받은 장난감자동차, 구급차, 경찰차가 있을 때,
장난감자동차처럼 Car클래스의 horn메서드를 그대로 사용할 수도 있지만,
구급차와 경찰차처럼 같이 horn()을 재정의하여 사용할 수 있습니다.
class Car{
void horn(){
System.out.println("빵빵");
}
}
class 장난감자동차 extends Car{
}
class 구급차 extends Car{
void horn(){
System.out.println("삐용삐용");
}
}
class 경찰차 extends Car{
void horn(){
System.out.println("위용위용");
}
}
public class Main{
public class void main(String[] args){
장난감자동차 car0 = new 장난감자동차();
구급차 car1 = new 구급차();
경찰차 car2= new 경찰차();
car0.horn(); //빵빵
car1.horn(); //삐용삐용
car2.horn(); //위용위용
}
}
+ 추상 클래스
+ 다형성에 대해 추가하기
'Java' 카테고리의 다른 글
함수형 프로그래밍 (0) | 2022.08.01 |
---|---|
GC (0) | 2022.08.01 |
String, StringBuilder, StringBuffer (0) | 2022.07.21 |
정렬(Sort) (0) | 2022.07.19 |
객체 지향 vs 절차 지향 프로그래밍 (0) | 2022.07.18 |