메소드 오버로딩이란?
처음 Java를 배울 때 변수를 선언할 때 변수명이 중복되게 선언하면 오류가 발생했다.
하지만 메소드는 이름이 같더라도 매개변수의 개수 또는 타입이 다르면
같은 이름을 사용해서 같은 이름이지만 여러 기능을 가진 메소드를 사용할 수 있게 되는데,
이를 메소드 오버로딩이라고 한다.
예를 들어보자.
package smile;
public class Test {
public static void main(String[] args) {
Test t = new Test();
t.something();
t.something(10);
t.something(10,10);
t.something(10,10.1);
}
void something() {
System.out.println("something!");
}
void something(int i) {
System.out.println(i);
}
void something(int i, int i2) {
System.out.println(i+i2);
}
void something(int i, double d) {
System.out.println(i+d);
}
}
이 코드에서 Test class 내부에 something() 이라는 이름을 가진 메소드가 4개나 존재하지만 매개변수의 개수나 자료형이 다르기 때문에 사용이 가능하게 된다.
오버로딩의 조건
- 메소드의 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 매개변수의 개수와 타입이 같지만 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.(예를 들어 void 인데 return 값이 있다거나 하는 경우)
오버로딩을 사용하는 이유 :
같은 이름에 여러 기능을 가진 메소드이기 때문에 각 각 메소드 이름을 지정하지 않아도 되고 오버로딩을 한 메소드 이름 하나만 알고 있으면 되기 때문에 사용이 편리해진다.
메소드 오버라이딩(재정의)
부모클래스에서 상속받은 클래스에서 같은 이름과 구조의 메소드를 재정의하는것 (다형성)
오버라이딩의 조건
- 메소드의 이름 , 리턴 타입 , 매개변수의 갯수나 타입이 완전히 일치해야 한다.
- 반드시 상속 관계가 있어야 한다
- 재정의를 하는 클래스의 메소드 접근제어지시자는 상위 클래스의 접제자 보다 크거나 같아야 한다. (protected < public) 순서
- static , final , private 메소드는 오버라이딩 할 수 없다
자식클래스에서 재정의한 메소드를 부모클래스에서 다시 사용하면 재정의한 상태로 나온다. 왜그럴까?
메소드를 재정의하면 자식클래스에서 새로이 덮어씌워지는것이 아니고
부모클래스에서 메소드가 재정의되는 것이기 때문이다.
class Animal01 {
void makeSound() {
System.out.println("동물이 소리를 낸다.");
}
}
class Dog01 extends Animal01 {
void makeSound() {
System.out.println("개가 짖는다");
}
void bark() {
System.out.println("왈왈");
}
}
//아래에서 실행해보면 Animal 클래스에서도 Dog객체의 makesound()
//가 상속을 받아 재정의 했기 때문에 부모 Animal 클래스의 makesound 가 재정의 된다.
// 고로 "개가 짖는다" 가 출력이 된다.
※ 메소드 오버로딩은 가져가다 쓰는 것이고, 메소드 오버라이딩은 가져다가 !덮어쓰는것!
'언어 > Java' 카테고리의 다른 글
생성자란? (0) | 2024.09.23 |
---|---|
Java 의 기본 . Class (0) | 2024.09.23 |
getter 와 setter 란? (0) | 2024.09.23 |
객체 지향프로그래밍이란? (0) | 2024.09.19 |
24-08-27 월 (0) | 2024.08.28 |