본문 바로가기
객체지향 OOP

[자바의정석 기초 객체지향 개념] 오버로딩 VS 오버라이딩

by bzerome240 2022. 5. 30.

https://www.zerocho.com/category/JavaScript/post/59c17a58f40d2800197c65d6

 

오버로딩

: 한 클래스 안에 같은 이름의 메서드를 여러개 정의하는 것

 

대표적인 오버로딩

void println()
void println(char x)
void println(int x)
void println(String x)
...

 

오버로딩 조건

  1. 메서드 이름이 같아야 한다.
  2. 매개변수의 개수 또는 타입이 달라야 한다.
  3. 반환 타입은 영향 없다.

 

오버로딩 예제

매개변수는 다르지만 같은 의미의 기능 수행

class Math {
	int add(int a, int b) {
		return a+b;
	}

	long add(long a, long b) {
		return a+b;
	}

	int add(int[] a) {
		int result = 0;

		for(int i=0; i<a.length; i++)
			result += a[i];

		return result;
	}
}

 

 


 

오버라이딩

: 상속받은 조상의 메서드를 자신에 맞게 변경하는 것 (override 덮어쓰다)

class Point {
	int x;
	int y;

	String getLocation() {
		return x + "," + y;
	}
}

class Point3D extends Point {
	int z;

	// 오버라이딩
	String getLocation() { // 선언부는 변경 불가능
		return x + "," + y + "," + z;
	}
}

 

오버라이딩 조건

  1. 선언부가 조상 클래스의 메서드와 일치해야 한다.
  2. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
  3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.

 


 

오버로딩 vs 오버라이딩

사실 관계는 없지만 이름이 비슷해서 관련이 있는 것 처럼 보임.

  • 오버로딩: 기존에 없는 새로운 메서드를 정의하는 것 NEW
  • 오버라이딩: 상속받은 메서드의 내용을 변경하는 것 CHANGE
class Parent {
	void pMethod() {}
}

class Child {
	void pMethod() {}      // 오버라이딩
	void pMethod(int i) {} // 오버로딩

	void cMethod() {}      // 메서드 정의    
	void cMethod(int i) {} // 오버로딩
	void cMethod() {}      // 중복정의(에러)
}

 

 

 

728x90
반응형

댓글