-
오버라이딩과 오버로딩Programming/Java 2021. 7. 29. 19:15
절대 혼동해서는 안 될 자바의 기초 개념 중 하나는 오버라이딩과 오버로딩이다.
이름은 비슷하지만 오버라이딩과 오버로딩은 전혀 다르다.
오버라이딩
정의 상속관계에서, 조상 클래스로부터 물려받은 메서드를 자식 클래스에서 재정의하는 것 사용 상황 조상 클래스로부터 상속받은 메서드의 내용을 다른 내용으로 변경할 필요가 있을 때 (change, modify) 조건 1. 선언부가 일치해야 한다
① 메서드 이름이 같아야 한다.
② 매개변수가 같아야 한다.
③ 반환타입이 같아야 한다.
2. 접근제어자는 조상클래스보다 좁으면 안 된다.
※ 접근제어자의 접근 범위 : (넓다<- ) public, protected, (default), private ( -> 좁다)
3. 조상 클래스 메서드보다 예외의 개수를 더 많이 선언할 수 없다.
단순히 명시적으로 나열된 예외 개수가 적은지 많은지의 문제가 아니다. 자손 클래스를 더 많이 가진 상위 클래스인지도 따져야 한다.
4. 인스턴스 메서드 -> static 메서드 / static 메서드 -> 인스턴스 메서드로 변경할 수 없다.오버로딩
정의 이름은 같지만 매개변수 개수와 타입이 다른 여러 개의 새로운 메서드를 정의하는 것 사용 상황 같은 기능을 하지만 매개변수를 다르게 받을 필요가 있는 경우 조건 1. 메서드의 이름이 같아야 한다.
2. 매개변수의 개수 또는 타입이 달라야 한다.
3. 매개변수의 순서로 메서드가 구분된다면 오버로딩이 가능하다.
※ 메서드 반환타입은 무관하다.대표 예 자주 쓰는 print는 인자로 전달받은 값을 출력하는 메서드이다. 여러 타입의 인자를 넣을 수 있는 것은 다음과 같이 오버로딩이 이미 되어있기 때문이다.
void print(boolean b)
void print(char b)
void print(char[] b)
void print(double b)
void print(float b)
void print(int b)
void print(long b)
void print(Object b)
void print(String b)'Programming > Java' 카테고리의 다른 글
다형성 (0) 2021.08.02 프로그래밍 언어의 분류 (0) 2021.07.31 변수, 배열, 구조체, 클래스, 객체, 인스턴스 (0) 2021.07.29 자바 프로그래밍 시작하기 (0) 2021.05.25 이클립스 Encoding 설정 (0) 2021.05.25