기타/프로그래밍 분류

JAVA - 17.오버라이드,오버로드

zelkova 2011. 7. 2. 17:02

오버라이드란?
오버라이드는 부모 클래스와 자식 클래스 사이에 존재하는 상속과 밀접한 관련이 있다. 보통 상속 관계에 있는 자식 클래스는 부모 클래스로부터 상속받은 메서드를 그대로 사용한다. 즉 자식클래스에서 추가로 정의된 메서드를 제외하고 상속받은 메서드는 부모 클래스에서 정의한 기능을 그대로 자식 클래스에서 사용하기 된다. 그러나 경우에 따라서는 부모 클래스에서 정의한 메서드를 자식 클래스에서 재정의(overriding)하여 실행 사항을 자식 클래스에 맞게 변경하는 경우도 생긴다.  이럴 경우 오버라이딩을 쓰게 된다.


오버라이딩 하기
메서드 시그니처 재정이의 범위에서 제외되며 단지 메서드의 바디를 제정의한다. 이때 매서드 시그니처는 재정의 범위에서 제외되며 단지 메서드의 바디만을 재정의 하게된다.

*메서드 시그니쳐: 리턴 타입, 매개인자 개수 및 각 매개인자 데이터 타입)

public Class SuperClass{
   protect String num1;
   protect String num2;

   public void set Function1(String num1,long num3)
   {
      this.num1 = num1;
      this.num2 = num3;
   }
}

public class SubClass{
   protect long num4;

   public void Function1(String num1,long num3, long num4)<--이게 오버라이딩 
   {
this.num1 = num1
this.num2 = num3;
this.num4 = num1;
   }
}


오버로드란?
오버로드는  하나의 클래스 안에서 이름(식별자)이 같은 메서드를 만들 수 있는 규칙을 말한다.즉 하나의 클래스 안에서 같은 이름으로 정의된 메서드가 존재하더라도 각 메서드의 매개인자 자료형, 매개인자 개수 등이 다르면 서로 다른 메서드로 인정하는 것이다.

오버로드 하기
1.하나의 클래스 안에서 이름이 같은 메서드라도 매개인자의 데이터형이 서로 다를 경우
Class Test{
   void function1(int num1, int num2){
      System.out.println(num1+num2);
  }
   void function1(float num1, float num2){
      System.out.println(num1+num2);
   }
}
  
2. 하나의 클래스 안에서 이름이 같은 메서드라도 매개인자의 개수가 서로 다를 경우 오버로드로 인정됨
Class Test{
   void function1(int num1, int num2){
      System.out.println(num1+num2);
  }
   void function1(int num1, int num2, int num3){
      System.out.println(num1+num2);
   }
}
3. 하나의 클래스 안에서 이름이 같은 메서드라도 매개인자의 데이터형 순서가 서로 다를 경우 오버로드로 인정된다.
Class Test{
   void function1(int num2, int num1){
      System.out.println(num1+num2);
  }
   void function1(float num1, float num2){
      System.out.println(num1+num2);
   }
}


경우4. 위의 경우가 혼합되어도 인정된다.
1,2번 경우 짬뽕, 2,3번 경우 짬뽕, 3,4번짬뽕 1,2,3,4 모두 짬뽕 등등 모두 인정됨

반응형

'기타 > 프로그래밍 분류' 카테고리의 다른 글

JAVA - 19 인터페이스  (0) 2011.07.03
JAVA - 18.추상 메서드와 추상 클래스  (0) 2011.07.03
JAVA - 16.상속  (0) 2011.07.02
Java - 15.생성자  (0) 2011.07.01
Java - 14.패키지  (0) 2011.07.01