반응형
오버로딩 (Overloading)
상속과는 크게 관련없지만 오버라이딩과 함께 보면 좋은 개념이다.
자바에서는 이름이 같은 메소드를 중복으로 정의할 수 있다.
이름이 같은 함수끼리는 매개변수의 갯수 혹은 타입이 달라야하는데 이러한 경우가 오버로딩에 해당한다.
(매개변수가 같고 리턴 값이 다른 경우는 오버로딩에 해당하지않는다.)
오버로딩은 한 클래스 내에서도 나타날 수 있고 상속관계에서 나타날 수도 있다.
- 하나의 클래스
class Person {
public void Func1() {
System.out.println("this is Func1");
}
public void Func1(String str) { // 오버로딩 함수
System.out.println("this is overloading Func1 : " + str);
}
};
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.Func1();
person.Func1("매개변수 넣기!");
}
}
- 상속 관계
class Person {
public void Func1() {
System.out.println("this is parent Func1");
}
}; // 부모 클래스
class Minsu extends Person {
public void Func1(String str) { // 오버로딩 함수
System.out.println("this is child Func1 : " + str);
}
}; // 자식 클래스
public class Main {
public static void main(String[] args) {
Minsu minsu = new Minsu();
minsu.Func1();
minsu.Func1("매개변수 넣기!");
}
}
반응형
오버라이딩 (Overriding)
상속 관계에서 나타나는 개념으로 자식 클래스가 부모 클래스로부터 상속받은 메소드를 재정의하는 경우이다.
오버라이딩 함수는 함수명은 물론 매개변수와 반환 값 또한 동일해야한다.
class Person {
public void Func1() {
System.out.println("this is parent Func1");
}
}; // 부모 클래스
class Minsu extends Person {
public void Func1() { // 오버라이딩 함수
System.out.println("this is child Func1");
}
}; // 자식 클래스
public class Main {
public static void main(String[] args) {
Person person = new Person();
Minsu minsu = new Minsu();
person.Func1();
minsu.Func1();
}
}
오버로딩 vs 오버라이딩
구분 | 오버로딩 | 오버라이딩 |
선언 | 한 클래스 안에서 혹은 상속 관계에서 동일한 이름의 메소드를 중복 작성 | 자식 클래스에서 부모 클래스의 메소드와 동일한 이름으로 메소드를 재작성 |
관계 | 동일 클래스 내, 상속 관계 | 상속 관계 |
조건 | 메소드 이름은 동일 메소드 매개변수의 개수 혹은 타입이 달라야함 |
메소드의 이름, 리턴 타입, 매개변수 타입 및 개수 모두 동일해야함 |
바인딩 | 컴파일 시간에 중복된 메소드 중 호출 메소드 결정 (정적 바인딩) | 실행 시간에 오버라이딩 메소드를 찾아 호출 (동적 바인딩) |
반응형
'JAVA > 예제' 카테고리의 다른 글
[JAVA] 예제로 알아보는 상속 (2) 생성자와 super (0) | 2022.04.14 |
---|---|
[JAVA] 예제로 알아보는 상속 (1) 상속의 개념과 IS-A 관계 (0) | 2022.04.14 |
댓글