오버로딩 |
한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 '메서드 오버로딩'또는 간단히 '오버로딩'이라 한다.
오버로딩의 특성
1. 메서드의 이름이 같아야 한다.
2. 매개변수의 개수 또는 타입이 달라야 한다.
오버로딩의 장점
1. 쉽고 이름도 짧게 할 수 있어서 유의 가능성을 많이 줄일 수 있다.
2. 메서드의 이름만 보고도 기능 파악을 할 수 있다.
3. 이름을 일일이 구분해야 되는 부담감을 덜어준다.
가변인자와 오버로딩
매개변수를 동적으로 지정해 줄 수 있다.
public class VarArgs {
public static void main(String[] args) {
String[] strArr = {"A", "B", "C"};
System.out.println(concatenate("", "A", "B", "C")); //ABC
System.out.println(concatenate("-", strArr)); //A-B-C
System.out.println(concatenate(",", new String[] {"a", "b", "c"})); //a,b,c,
System.out.println("["+concatenate(",", new String[0] ) + "]"); //[]
System.out.println("["+concatenate(",") + "]"); //[]
}
static String concatenate(String delim, String...args) {
String result = "";
for(String str : args) {
result += str + delim;
}
return result;
}
}
오버라이딩 |
조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것을 오버라이딩이라고 한다. override의 사전적 의미는 '~위에 덮어쓰다' 라는 뜻이다.
오버라이딩의 조건
자손 클래스에서 오버라이딩하는 메서드는 조상 클래스의 메서드와
- 이름이 같아야 한다.
- 매개변수가 같아야 한다.
- 반환타입이 같아야 한다.
조상 클래스의 메서드를 자손 클래스에서 오버라이딩할 때
- 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
- 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
- 인스턴스메서드를 static메서드로 또는 그 반대로 변경할 수 없다.
오버로딩 vs 오버라이딩
오버로딩: 기존에 없는 새로운 메서드를 정의하는 것
오버라이딩: 상속받은 메서드의 내용을 변경하는 것
super
1. super는 자손 클래스에서 조상 클래스로부터 상속받은 맴버를 참조하는데 사용되는 참조변수이다.
2. 맴버변수와 지역변수의 이름이 같을 때 this를 붙여서 구별했듯이 상속받은 맴버와 자신의 맴버와 이름이 같을 때는 super를 붙여서 구별할 수 있다.
3. 조상 클래스의 맴버와 자손 클래스의 맴버가 중복 정의되어 서로 구별해야하는 경우에만 사용하는 것이 좋다.
4. 조상 클래스의 메서드를 자손 클래스에서 오버라이딩한 경우에 super를 사용한다.
5. static메서드에서는 사용할 수 없다.
super()
1. this()와 마찬가지로 super() 역시 생성자이다.this()는 같은 클래스의 다른 생성자를 호출하는 데 사용되지만, super()는 조상 클래스의 생성자를 호출하는데 사용된다.
2. 생성자의 첫 줄에서 조상클래스의 생성자를 호출해야하는 이유는 자손 클래스의 맴버가 조상클래스의 맴버를 사용할 수도 있으므로 조상의 맴버들이 먼저 초기화되어 있어야 한다.
3. Object클래스를 제외한 모든 클래스의 생성자 첫 줄에 생성자.this() 도는 super.this()를 호출해야 한다. 그렇지 않으면 컴파일러가 자동으로 super()를 생성자의 첫줄에 삽입한다.
클래스 - 어떤 클래스의 인스턴스를 생성할 것인가?
생성자 - 선택한 클래스의 어떤 생성자를 이용해서 인스턴스를 생성할 것인가?
'프로그래밍 > JAVA' 카테고리의 다른 글
[JAVA 이론] 다형성 (0) | 2022.01.27 |
---|---|
[JAVA 이론] 상속 (0) | 2022.01.26 |
[JAVA 이론] 객체지향 프로그래밍_2 (0) | 2022.01.22 |
[JAVA 이론] 객체지향 프로그래밍_1 (2) | 2022.01.19 |
[JAVA 이론] 배열 (0) | 2022.01.15 |