본문 바로가기
JAVA/예제

[JAVA] 예제로 알아보는 상속 (3) 오버로딩과 오버라이딩

by 부먹짱 2022. 4. 14.
반응형

(1) 상속의 개념과 IS-A 관계

 

[JAVA] 예제로 알아보는 상속 (1) 상속의 개념과 IS-A 관계

(2) 생성자와 super [JAVA] 예제로 알아보는 상속 (2) 생성자와 super 자바의 상속을 예제를 통해 정리하였다. (1) 상속의 개념과 IS-A 관계 (2) 생성자와 super (3) 오버로딩과 오버라이딩 생성자 객체를 선

bumukisbest.tistory.com

(2) 생성자와 super

 

[JAVA] 예제로 알아보는 상속 (2) 생성자와 super

자바의 상속을 예제를 통해 정리하였다. (1) 상속의 개념과 IS-A 관계 (2) 생성자와 super (3) 오버로딩과 오버라이딩 생성자 객체를 선언하면 생성자는 자동으로 호출된다. 상속 관계에서 자식 클래

bumukisbest.tistory.com

 

오버로딩 (Overloading)

상속과는 크게 관련없지만 오버라이딩과 함께 보면 좋은 개념이다.

자바에서는 이름이 같은 메소드를 중복으로 정의할 수 있다.

이름이 같은 함수끼리는 매개변수의 갯수 혹은 타입이 달라야하는데 이러한 경우가 오버로딩에 해당한다.

(매개변수가 같고 리턴 값이 다른 경우는 오버로딩에 해당하지않는다.)

 

오버로딩은 한 클래스 내에서도 나타날 수 있고 상속관계에서 나타날 수도 있다.

 

- 하나의 클래스

class Person {
	public void Func1() {
		System.out.println("this is Func1");
	}
	public void Func1(String str) { // 오버로딩 함수
		System.out.println("this is overloading Func1 : " + str);
	}
};

public class Main {
	public static void main(String[] args) {
		Person person = new Person();
		person.Func1();
		person.Func1("매개변수 넣기!");
	}
}

결과 화면

- 상속 관계

class Person {
	public void Func1() {
		System.out.println("this is parent Func1");
	}
}; // 부모 클래스

class Minsu extends Person {
	public void Func1(String str) { // 오버로딩 함수
		System.out.println("this is child Func1 : " + str);
	}
}; // 자식 클래스

public class Main {
	public static void main(String[] args) {
		Minsu minsu = new Minsu();
		minsu.Func1();
		minsu.Func1("매개변수 넣기!");
	}
}

결과 화면

 

반응형

 

오버라이딩 (Overriding)

상속 관계에서 나타나는 개념으로 자식 클래스가 부모 클래스로부터 상속받은 메소드를 재정의하는 경우이다.

오버라이딩 함수는 함수명은 물론 매개변수와 반환 값 또한 동일해야한다.

 

class Person {
	public void Func1() {
		System.out.println("this is parent Func1");
	}
}; // 부모 클래스

class Minsu extends Person {
	public void Func1() { // 오버라이딩 함수
		System.out.println("this is child Func1");
	}
}; // 자식 클래스

public class Main {
	public static void main(String[] args) {
		Person person = new Person();
		Minsu minsu = new Minsu();
		person.Func1();
		minsu.Func1();
	}
}

 

결과 화면

 

오버로딩 vs 오버라이딩

구분 오버로딩 오버라이딩
선언 한 클래스 안에서 혹은 상속 관계에서 동일한 이름의 메소드를 중복 작성 자식 클래스에서 부모 클래스의 메소드와 동일한 이름으로 메소드를 재작성
관계 동일 클래스 내, 상속 관계 상속 관계
조건 메소드 이름은 동일
메소드 매개변수의 개수 혹은 타입이 달라야함
메소드의 이름, 리턴 타입, 매개변수 타입 및 개수 모두 동일해야함
바인딩 컴파일 시간에 중복된 메소드 중 호출 메소드 결정 (정적 바인딩) 실행 시간에 오버라이딩 메소드를 찾아 호출
(동적 바인딩)

 

반응형

댓글