반응형
스프링을 공부하면서 본게 오버라이딩이 자주쓰이는 것 같았다.
그래서 오버로딩과 오버라이딩의 정의를 정확히 인지하고 사용해야 내가 더 잘 사용할 수 있을것 같아서 한번 찾아보았다.
간단하게 알아보자!
오버로딩(Overloading)
- 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것.
오버로딩의 조건
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.
ex)😀
public class Main {
public static void main(String[] args) {
Message aMessage = new Message();
aMessage.getMethodInfo();
aMessage.getMethodInfo(1);
aMessage.getMethodInfo(1, 2);
aMessage.getMethodInfo("ONE");
aMessage.getMethodInfo("ONE", "TWO");
}
}
public class Message {
void getMethodInfo() {
System.out.println("매개변수가 없는 메소드입니다.");
}
void getMethodInfo(String param01) {
System.out.println("매개변수가 한 개이고 타입이 String인 (변수 값:" + param01 + ") 메소드입니다.");
}
void getMethodInfo(String param01, String param02) {
System.out.println("매개변수가 두 개이고 타입이 String인 (변수 값:" + param01 + "와 변수 값:" + param02 + ") 인 메소드입니다.");
}
void getMethodInfo(int param01) {
System.out.println("매개변수가 한 개이고 타입이 int인 (변수 값:" + param01 + ") 메소드입니다.");
}
void getMethodInfo(int param01, int param02) {
System.out.println("매개변수가 두 개이고 타입이 int인 (변수 값:" + param01 + "와 변수 값:" + param02 + ") 인 메소드입니다.");
}
}
오버라이딩(Overriding)
- 상위 클래스로부터 상속받은 메서드의 내용을 변경하는 것 (재 정의).
오버라이딩의 조건
- 하위 클래스에서 오버라이딩하는 메서드는 상위 클래스의 메서드와 이름, 매개변수, 리턴타입이 같아야한다.
- 상위 클래스의 메서드를 하위 클래스에서 오버라이딩 할 때
- 접근 제어자를 상위 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
- 예외는 상위 클래스의 메서드보다 많이 선언할 수 없다.
- 인스턴스메서드를 static메서드로 또는 그 반대로 변경할 수 없다.
class Animal {
public String getMethodInfo(){
return "동물 메서드입니다.";
}
}
class Cat extends Animal {
public String getMethodInfo() {
return "고양이 메서드입니다.";
}
}
class Dog extends Animal {
public String getMethodInfo() {
return "강아지 메서드입니다.";
}
}
public class Main {
public static void main(String[] args) {
Animal aAnimal = new Animal();
Dog aDog = new Dog();
Cat aCat = new Cat();
System.out.println(aAnimal.getMethodInfo());
System.out.println(aDog.getMethodInfo());
System.out.println(aCat.getMethodInfo());
}
}
실행결과
동물 메서드입니다.
강아지 메서드입니다.
고양이 메서드입니다.
다시한번 간단히 확인하고 끝내자
오버로딩(overloading)은 새로운 메소드를 정의하는 것이고!
오버라이딩(overriding)은 상속받은 기존의 메소드를 재정의하는 것이다!!

반응형