JAVA

메서드 오버로딩(Overloading) ? 메서드 오버라이딩(Overriding)?

고민말고생각하는사람 2024. 1. 28. 18:49

메서드 오버로딩

 매개변수가 다른 메서드를 여러 개 정의 하는 것.

ㄴ 메서드 이름이 같아야 함.

ㄴ loading 은 과적. 물건을 쌓는다는 의미

ㄴ 칸마다 기능이 다른 기차를 생각하면 편함

 

YH 특급열차

머리 침실 짐칸 머리

 

필요에 의해(인기가 너무 좋아져서)  칸(파라미터) 수를 늘림.

 

YH 특급열차

머리 식당칸 침실 예체능실 영화관 객실 머리

 

 

메서드 오버로딩

 하위 클래스에서 상위 클래스의 메서드를 재정의 하는 과정. 상속 관계에서 사용됨.

ㄴ 뭔가 얹어서 덮어씌운는 것.

ㄴ 위에서 내려다 본 케익 생각하면 편함.

ㄴ 시작은 초코 케잌으로 시작했으나, 끝은 딸기케잌 일지니!!

 

 

메서드 오버라이딩 조건

- 메서드 이름이 같아야 함.

- 파라미터 타입, 순서, 개수가 같아야 함.

- 반환타입이 같아야 함. 단, 반환타입이 하위 클래스 타입이 될 수 있음.

public SuperAnimal returnAnimal(){
	SuperAnimal animal = new SuperAnimal();
    return animal;
}
@Override
public SubBird returnAnimal(){
	SubBird animal = new SubBird();
    return animal;
}

- 오버라이딩 메서드의 접근 제어자는 상위 클래스의 메서드보다 더 제한적이어서는 안 됨.

public SuperAnimal returnAnimal(){
	SuperAnimal animal = new SuperAnimal();
    return animal;
}
@Override
protected SubBird returnAnimal(){
	SubBird animal = new SubBird();
    return animal;
}

ㄴ override 된 메서드의 접근제어자가 protected. 즉,  public 보다 제한적이므로 사용 불가.

- 오버라이딩 메서드는 상위 클래스의 메서드보다 더 많은 체크 예외를 throws 로 선언할 수 없음. (이건 추후 알아보고)

- static, final, private 키워드가 붙은 메서드는 오버라이딩 될 수 없음.

 ㄴ static : method(클래스 영역)에 저장, 관리됨. 인스턴스 Override의 의미가 없음. 공용되는 자원임.

 ㄴ final : 값을 바꾸지 않겠다는 키워드. 따라서 Override(덮어씌우기) 불가.

 ㄴ private : 선언된 클래스 내에서만 사용. 상속될 수 없음 = Override 불가.

- 생성자 오버라이딩 : 생성자는 오버라이딩 할 수 없음.