본문 바로가기

Software/Java

[Java] 5. 오버로딩(overloading) vs 오버라이딩(overriding)

 

 

객체지향의 4대 특징 중 하나인 다형성은 이름 그대로 여러가지 형태를 가질 수 있다는 것을 의미한다.

 

이러한 특징을 지원하는 방법이 바로 오버로딩(Overloading)과 오버라이딩(Overriding)인데, 이름이 비슷해서 그런지 몰라도 많은 사람들이 두가지를 헷갈려한다.

 

1) 오버로딩(Overloading)

메소드를 생성할때 매개변수의 타입과 개수를 다르게 하여 같은 이름의 메소드를 여러개 생성할 수 있는 것을 의미한다.

예를들어,

void Solve(int a){}

void Solve(int a, int b){}

void Solve(String c) {}   

 

식으로 Solve 라는 같은 이름의 메소드를 여러개 생성할 수 있으며, 인자로 넣는 값에 따라 알맞은 메소드가 호출되어 처리된다.

 

2) 오버라이딩(Overriding)

핵심만 말하자면 메소드를 재정의 한다는 의미이다.

 

상속을 받을 경우 부모 클래스에 있는 메소드를 자식 클래스 역시 보유하게 되는데, 그때 자식 클래스에서는 상속받은 메소드의 내용을 재정의 하는 것이 가능하다.

당연히 자식 클래스로 생성한 객체에서 메소드를 호출하면 재정의한 매소드가 호출된다.

 

public class Car{

   public void print(){

      System.out.println("Car");

   }

}



public class MyCar extends Car{

   public void print(){

      System.out.println("MyCar");

   }

}



MyCar mc = new MyCar();

mc.print() 

 

를 한다면 MyCar가 출력된다.