오버로딩, 오버라이딩

강찬우·2023년 10월 23일

혼자공부

목록 보기
1/14

오버로딩(Over Loading)

메소드 오버로딩은 이름이 같고 인자 목록이 다른 메소드 두 개를 만드는 것이다. 오버로딩을 활용하면 호출하는 쪽의 편의를 위해 같은 메소드를 서로 다른 인자 목록을 가진 여러가지 버전으로 만들 수 있다.

예)

public calss Overloads{
	String uniqueID;
    public int addName(int a, int b){
    	return a+b;
    }
    public double addName(double a, double b){
    	return a+b;
    }
    
    public void setUniqueID(String theID){
    	uniqueID = theID;
    }
    public void setUniqueID(int ssNumber){
    	String numString = "" + ssNumber;
        setUniqueID(numString);
    }
}
  1. 리턴유형이 달라도 된다.
    -> 메소드를 오버로드 할때는 인자 목록만 다르면 리턴유형은 달라도 된다.

  2. 리턴 유형만 바꾸는 것은 x
    -> 인자목록이 같은 상황에서 리턴 유형만 다른 것은 오버로딩이 아니다. 오버로딩은 러턴 유형과는 관계없이 인자목록이 달라야한다

이번에 공부하면서 알게된 점은 오버로딩은 상속이나 다형성과는 관계가 없다는 것이다. 오버로딩된 메소드들은 이름만 같을 뿐 서로 다른 메소드들이다.

오버라이딩

오버라이딩은 상위 클래스가 가지고 있는 메소드를 하위 클래스에서 재정의하여 사용하는 것이다. 이 때, 하위 클래스에서 재정의한 메소드는 상위 클래스에서 정의한 메소드와 이름과 리턴 유형이 같아야 한다.

예)

	class Animal{
   	void speak(){
       	System.out.println("~~~~~~");
       }
   }
   
   class Dog extends Animal{
   	void speak(){
       	System.out.println("bark bark");
       }
   }
  1. 인자는 똑같아야 하고, 리턴 유형은 호환 가능해야한다.
    -> 상위 클래스에서 어떤 인자를 받아들이든 오버라이드하는 메소드에서는 똑같은 인자를 사용해야 한다. 그리고 상위클래서에서 어떤 리턴 유형을 선언하든지 오버라이드하는 메소드에서는 똑같은 유형이나 하위클래스 유형을 리턴해야 한다.


  2. 메소드를 더 접근하기 어렵게 하면 안된다.
    -> 상위클래스의 계약서에서는 다른 코드에서 어떻게 메소드를 사용할 수 있는지에 대해 정의한다. 즉, 접근 단계는 그대로 유지하거나 완화시켜야한다. 예를 들면 public 메소드를 오버라이드 해서 private메소드를 만들 수 없다는 것이다.

0개의 댓글