본문 바로가기
▶개발/JAVA

[JAVA] 객체지향개념(오버로딩과 오버라이딩)

by 브라더 준 2018. 12. 18.

객체지향개념(overloading, overriding)

+중복과 재정의


#오버로딩(overloading)

@사전적의미

- overloading = over하여 loading하다. "많이 싣다"의 의미.

- 단일의 메소드 이름을 갖고 여러 기능을 구현한다는 점에서 많이 싣다라고 이해하면 쉬움.

- 여러 기능을 구현한다는 점에서 "중복"이라고 일컫기도 함.


@오버로딩을 하기 위해서는

- 메소드의 이름이 같아야 함.

- 메소드의 매개변수 타입과 갯수가 달라야 함.


@예제

int add(int a, int b) { return a+b; } // int형 매개변수 타입
float add(float a, float b) { return a+b; } // float형 매개변수 타입
// 두 매개변수의 타입이 다르므로 오버로딩이 되었음.
long add(int a, long b) { return a+b; } // 1번
long add(long a, int b) { return a+b; } // 2번
// 이 또한 매개변수가 서로 순서가 달라 구분되므로 오버로딩임.

// 호출과정

add(1, 2L); // int형 매개변수와 long형 매개변수가 전해져 1번 메소드가 호출됨.


#오버라이딩(overriding)

@사전적의미

- overriding = 위에 올라타다. "덮어 씌움"의 의미.

- 부모클래스로부터 상속받은 메소드의 내용을 변경하는 것.

- 부모의 메소드를 덮어씌우다.

- 덮어씌워 새로운 기능을 구현하는 점에서 "재정의"이라고 일컫기도 함.


@오버라이딩을 하기 위해서는

- 부모클래스의 메소드를 오버라이딩하고자 하는 자식클래스는 부모클래스 메소드의 이름, 매개변수(타입과 갯수), 반환타입을 맞춰주어야 함.

- 반환타입은 자식클래스의 타입으로 변경이 가능함(JDK 1.5부터)

- 부모 클래스의 접근제어자보다 더 좁은 범위로 변경할 수 없음.

- 인스턴스 메소드를 static메소드로 변경할 수 없음.

- 예외또한 조상클래스의 메소드보다 많이 선언할 수 없음.


@예제


class Parent{
	int power;
	void powerup() { ++power; }
}

// Parent를 상속한 Child 클래스
// Child 클래스에서 부모 클래스의 powerup() 메소드를 오버라이딩하고자 함.
class Child extends Parent{
	@override
	void powerup() { power=+power; }
	// super.powerup(); 부모 클래스의 powerup() 메소드를 호출할 시에는 super 사용
}


반응형