프로그래밍/JAVA

[JAVA] 오버로딩과 오버라이딩의 차이점

노력의천재 2018. 12. 5. 18:54

오버로딩과 오버라이딩은 자바에서 다형성을 이루는 방법들이다.

 

오버라이딩은 슈퍼클래스의 메소드 이름, 매개변수 타입과 개수, 리턴 타입을 모두 동일하게 서브 클래스에 재작성 하는 경우

오버로딩은 한 클래스나 상속 관계에 있는 클래스들 사이에 메소드의 이름은 같지만 매개변수 타입이나 개수가 다르게 메소드를 작성하는 경우이다.

오버라이딩은 상속 관계에서 성립하지만 오버로딩은 동일한 클래스 내 혹은 상속 관계 둘다 가능하다.

 

오버라이딩의 예

 

class Human                                   // 슈퍼 클래스

public void genderShow(){       

System.out.println("Human");

}

}

 

class Man extends Human{                // Human 클래스를 상속받은 자식 클래스 Man

public void genderShow(){           // 슈퍼 클래스의 메소드 이름, 매개변수 타입과 개수가 모두 일치 -> 오버라이딩

System.out.println("Man");

}

}

 

class Woman extends Woman{            // Human 클래스를 상속받은 자식 클래스 Woman

public void genderShow(){

System.out.println("Woman");

}

}

 

Human 클래스의 genderShow() 메소드를 Man 클래스와 Woman 클래스가 상속받아서 각각 오버라이딩 하고 있다.

 

오버로딩의 예

 

class Calculator{

public int getSum(int i, int j){       

return i+j

}

public int getSum(int i, int j, int k){            // 위의 getSum 메소드와 메소드 이름은 동일하지만 매개변수 개수가 다르다.

return i+j+k;

}

public double getSum(double i, double j){    // 매개변수 타입이 다른 경우

return i+j;

}

}

getSum 메소드가 각각 매개변수 개수와 타입이 다르게 오버로딩 하고 있다.