<(메서드) 오버로딩 Overloading >
: 한 클래스 내에 이름이 같은 메소드를 여러 개 정의
- 조건,
① 같은 이름의 메서드인 경우
② 매개변수(parameter)가 다른 타입이거나 타입의 수가 다른 경우
③ 리턴값은 영향을 주지 않음
- 장점,
이름이 같으니, 같은 기능임을 파악할 수 있으며, 메서드 이름을 절약할 수 있음
class OverloadingTest {
public static void main(String[] args){
Calculator cal = new Calculator();
//모두 cal.add로 메서드이름이 같지만 매개변수 타입이 다르기 때문에 출력이 가능하며,
//메서드 이름으로 모두 더하는 메소드이구나 임을 파악할 수 있음
System.out.println("cal.add(2,3) => " + cal.add(2,3));
System.out.println("cal.add(2,3l) => " + cal.add(2,3l));
System.out.println("cal.add(4l,3) => " + cal.add(4l,3));
System.out.println("cal.add(4l,5l) => " + cal.add(4l,5l));
int[] a = {10, 30, 40};
System.out.println("cal.add(a) => " + cal.add(a));
}
}
class Calculator {
int add(int a, int b) {
System.out.print("int add(int a, int b)");
return a+b;
}
long add(int a, long b) {
System.out.print("int add(int a, long b)");
return a+b;
}
long add(long a, int b) {
System.out.print("int add(long a, int b)");
return a+b;
}
long add(long a, long b) {
System.out.print("int add(long a, long b)");
return a+b;
}
int add(int[] a){
System.out.println("ind add(int[] a)");
int sum =0;
for(int i = 0; i<a.length; i++) {
sum += a[i];
} return sum;
}
} // end of class
< 오버라이딩(Overriding) >
: 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것자손클래스에서 오버라이딩할 때 메소드 조건,
- 자손클래스에서 오버라이딩하는 메서드 조건,
① 조상메서드와 자손메서드 이름이 같아야 한다.
② 조상메서드와 자손메서드 타입변수가 같아야한다.
③ 조상메서드와 자손메서드 반환타입이 같아야한다.
- 조상클래스의 메서드를 자손클래스에서 오버라이딩 할 때 조건,
① 접근제어자를 조상클래스의 메서드보다 좁은 범위로 변경할 수 없다.
② 예외는 조상클래스의 메서드보다 많이 선언할 수 없다.
③ 인스턴스 메서드를 static 메서드로 또는 그 반대로 변경할 수없다.
- super(참조변수)
: 조상의 멤버와 자손의 멤버를 구별하는데 사용하는 것으로, super는 조상의 멤버를 가리킴(this 와 사용방법이 같음)
(this : 인스턴스 자신을 가리키는 참조변수)
public class Overriding_SuperTest {
public static void main(String[] args) {
Child c = new Child();
c.method();
}
}
class Parent {
int x = 10;
}
class Child extends Parent {
int x =200;
void method() {
System.out.println("x : " + x); // x : 200
System.out.println("this.x : " + this.x); //this.x : 200
System.out.println("super.x : " + super.x); //super.x : 10
}
}
- 위의 코드를 그림으로 살펴보면,
* 오버로딩 vs 오버라이딩
오버로딩 : 자식클래스의 메서드는 조상클래스의 메서드와 이름이 같고, 매개변수 타입이나 수를 다르게 하여 새로운 메서드를 정의함(new)
오버라이딩 : 자식클래스의 메서드는 조상클래스의 메서드와 이름과 매개변수가 같아 내용을 변경하는 것(change)
참고 : 자바의 정석(남궁성)
'JAVA' 카테고리의 다른 글
JAVA_생성자(Constructor) (0) | 2021.07.31 |
---|---|
JAVA_상속 (0) | 2021.07.31 |
JAVA_객체지향(매개변수, 메서드 구분 ) (0) | 2021.07.28 |
JAVA_JVM 메모리 구조 (0) | 2021.07.28 |
JAVA_객체지향 프로그래밍2(변수, 메서드) (0) | 2021.07.28 |
댓글