Overloading vs Overriding

2022. 7. 22. 11:51Java

오버로딩

  파라미터가 다른 같은 이름의 메서드를 생성 가능하게 합니다. 

  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