Overloading vs Overriding

박주현·2022년 9월 27일
0

혼공

목록 보기
1/20

Overloading

  • 기존에 없는 새로운 메서드를 정의하는 것(new)

Overloading의 조건
1. 이름이 같아야 함.
2. 매개변수의 갯수나 타입이 달라야 함.
3. 반환 타입이 달라도 상관이 없다.

  • 선언부가 서로 달라야 함.
public static void main(String[] args) {
		int i1 = 3, i2 = 7, i3 = 10;
		double d1 = 7.0, d2 = 3.0;

		System.out.printf("max(%d, %d) = %d\n", i1, i2, max(i1, i2));
		System.out.printf("max(%.1f, %.1f) = %.1f\n", d1, d2, max(d1, d2));
		System.out.printf("max(%d, %d, %d) = %d\n", i1, i2, i3, max(i1, i2, i3));
	}

	public static int max(int n1, int n2) {
		int result = n1 > n2 ? n1 : n2;
		return result;
	}

	public static double max(double n1, double n2) {
		double result = n1 > n2 ? n1 : n2;
		return result;
	}

	public static int max(int n1, int n2, int n3) {
//		int result = n1 > n2 ? n1 : n2;
//		result = result > n3 ? result : n3;

		return max(max(n1, n2), n3);
	}

Overriding

  • 상속받은 메서드의 내용을 변경하는 것 (change, modify)

Overriding의 조건

  • 자손 클래스에서 overridng하는 메서드는 조상 클래스의 메서드와
  1. 이름이 같아야 한다.
  2. 매개변수가 같아야 한다,
  3. 반환타입이 같아야 한다.
  • 한마디로 요약하면 선언부가 서로 일치해야 한다는 것. 다만 접근 제어자와 예외는 제한된 조건 하에서만 다르게 변경할 수 있다.
  1. 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경 할 수 없다.
  2. 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
  • 조상 클래스의 메서드를 자손 클래스에서 overridng 할 때
  1. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
  2. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
  3. 인스턴스메서드를 static메서드로 또는 그 반대로 변경할 수 없다.

class Parent {
	void parentMethod() {}
}

class Child extends Parent {
	void parentMethod() {}		// overridng
    void parentMethod(int i) {}	// overloading
    
    void childMethod() {}
    void childMethod(int i) {}	// overloading
    void childMethod() {}		// error. 중복정의 되었음
    							// already defined in Child
}

0개의 댓글