Inor
[JAVA] Overloading과 Overriding 본문
자바에서는 OOP의 다형성이라는 특징을 지원하기 위해서 Overloading과 Overriding이라는 방법을 지원 합니다. 비슷한듯 완전 다른 두 방법을 한국어로 풀어서 써 보면 메서드의 중복(Overloading)과 메서드의 재정의(Overriding)라고 할 수 있습니다. 간단히 설명하면 아래와 같이 두 개념을 정의할 수 있습니다.
- Overloading : 같은 클래스에서 같은 이름의 메서드를 여러개 만들어서 사용할 수 있도록 해주는 방법
- Overriding : 부모 클래스를 상속 받은 자식 클래스에서 부모 클래스의 메서드를 자식 클래스에 맞게 재정의 하는 방법
class Mcdonald{ public void order(int price){ System.out.println("제출 금액 : " + price); } public void orderPoint(int price, int point){ System.out.println("제출 금액 : " + price); System.out.println("사용 포인트 : " + point); } }
class Mcdonald{ public void order(int price){ System.out.println("제출 금액 : " + price); } public void order(int price, int point){ System.out.println("제출 금액 : " + price); System.out.println("사용 포인트 : " + point); } public void order(int price, boolean isCard){ System.out.println("제출 금액 : " + price); System.out.println("카드 사용 : " + isCard); } public void order(int price, int point, boolean isCard){ System.out.println("제출 금액 : " + price); System.out.println("사용 포인트 : " + point); System.out.println("카드 사용 : " + isCard); } }
class Car{ public void accelate(){ System.out.println("일반 엔진 사용"); } } class RacingCar extends Car{ public void accelate(){ System.out.println("레이싱카 전용 엔진 사용"); } } public class Overriding { public static void main(String[] args) { Car myCar = new RacingCar(); myCar.accelate(); } }
위 코드의 결과는 "레이싱카 전용 엔진 사용" 입니다. 이 예제에서 주목해야 하는 클래스는 Car와 RacingCar 입니다. 각각의 클래스는 accelate라는 메서드를 갖고 있고 RacingCar에서는 Car의 accelate 메서드를 재정의 했습니다. 그렇게 생성된 RacingCar의 객체를 통해서 accelate 메서드를 호출하면 Car의 accelate가 호출 되는 것이 아니라 RacingCar의 accelate가 호출이 됩니다.
상속의 상황에서 부모 클래스는 자식 클래스의 기본적인 동작 방법을 정의한 것이라고 할 수 있습니다. 특수한 상황(오버라이딩 된 메서드)은 기본적인 상황(부모 클래스의 메서드)보다 더 높은 우선순위를 갖고 있습니다. 그렇기 때문에 accelate 메서드를 호출 했을때 부모 클래스의 메서드가 호출 되는 것이 아니라 자식 클래스의 메서드가 호출 되는 것 입니다.
오버라이딩의 기본적인 규칙은 리턴 타입, 메서드 이름, 매개변수가 모두 동일 해야지 허용 됩니다. 그러나 한 가지 제약 사항이 있는데 그것은 "static 메서드는 오버라이딩을 허용하지 않는다." 입니다. 사실 클래스 메서드에대한 오버라이딩은 하이딩(Hiding)이라고 부르는데 추후에 조금 더 자세히 알아보도록 하겠습니다.
참조
'Computer Engineering > Java' 카테고리의 다른 글
[JAVA] Thread(Thread Class 사용법) (0) | 2017.07.19 |
---|---|
[JAVA] Hiding(Static Method Overriding) (0) | 2017.07.17 |
[JAVA] GC(Garbage Collection : 종류와 과정) (0) | 2017.07.13 |
[JAVA] ClassLoader(JAVA : 클래스 로더의 구조) (0) | 2017.07.12 |
[JAVA] JVM(Java Virtual Machine : 자바 가상 머신의 구조) (0) | 2017.07.11 |