객체지향개념(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 사용
}
반응형
'▶개발 > JAVA' 카테고리의 다른 글
[JAVA] 자바 정리노트(3) (0) | 2018.12.19 |
---|---|
[JAVA] 변수의 초기화 순서(초기화블럭) (0) | 2018.12.18 |
[JAVA] 자바 정리노트(2) (0) | 2018.12.17 |
[JAVA] 자바 정리노트(1) (0) | 2018.12.17 |
[JAVA] 중첩반복문 이름붙여서 벗어나기 (0) | 2018.12.16 |