Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags more
Archives
Today
Total
관리 메뉴

luke

[자바/Java] - 오버라이딩, 오버로딩 본문

Study/Java

[자바/Java] - 오버라이딩, 오버로딩

luke-king 2024. 1. 13. 18:23

오버라이딩(Overriding),오버로딩(Overloading)

메서드 오버라이딩

메서드 오버라이딩은 하위 클래스에서 상위 클래스의 메서드를 재정의하는 과정을 의미한다. 따라서 상속 관계에서 사용한다. 부모의 기능을 자식이 다시 정의하는 것이다. 자식의 새로운 기능이 부모의 기존 기능을 넘어 타서 기존 기능을 새로운 기능으로 덮어버린다고 이해하면 된다. 오버라이딩을 우리말로 번역하면 무언가를 다시 정의한다고 해서 재정의라 한다. 상속 관계에서는 기존 기능을 다시 정의한다고 이해하면 된다.

 

바로 코드를 확인해 보겠다.

 

<오버라이딩 코드>

public class OverridingTest {

	public static void main(String[] args) {
		Person person = new Person();
		Child child = new Child();
		Senior senior = new Senior();
		
		person.cry();
		child.cry();
		senior.cry();
	}
}

class Person {
	void cry() {
		System.out.println("하하");
	}
}

class Child extends Person {
	@Override
	protected void cry() {
		System.out.println("호호");
	}
}

class Senior extends Person {
	@Override
	public void cry() {
		System.out.println("으헤헤헤");
	}
}

 

<실행 결과>

하하
호호
으헤헤헤

 

메서드 오버로딩

메서드 이름이 같고 파라미터가 다른 메서드를 여러개 정의하는 것을 메서드 오버로딩이라 한다. 오버로딩은 번역하면 과적인데, 과하게 물건을 담았다는 뜻이다. 따라서 같은 이름의 메서드를 여러개 정의했다고 이해하면 된다.

 

바로 코드를 확인해 보겠다.

 

<오버로딩 코드>

class OverloadingTest {

	public static void main(String[] args) {
		OverloadingMethods om = new OverloadingMethods();

		om.print();
		System.out.println(om.print(3));
		om.print("Hello!");
		System.out.println(om.print(4, 5));
	}
}

class OverloadingMethods {
	public void print() {
		System.out.println("오버로딩1");
	}

	String print(Integer a) {
		System.out.println("오버로딩2");
		return a.toString();
	}

	void print(String a) {
		System.out.println("오버로딩3");
		System.out.println(a);
	}

	String print(Integer a, Integer b) {
		System.out.println("오버로딩4");
		return a.toString() + b.toString();
	}

}

 

<실행 결과>

오버로딩1
오버로딩2
3
오버로딩3
Hello!
오버로딩4
45

 

 

오버로딩 - 기존에 없는 새로운 메소드를 추가하는 것

오버라이딩 - 상속받은 메소드를 재정의 하는 것

구분 Overriding Overloading
접근 제어자 부모 클래스의 메소드의 접근 제어자보다 더 넓은 범위의 접근 제어자를 자식 클래스의 메소드에서 설정할 수 있다. 모든 접근 제어자를 사용할 수 있다.
리턴형 동일해야한다. 달라도 된다.
메소드명 동일해야 한다. 동일해야 한다.
매개변수 동일해야 한다. 달라야만 한다.
적용 범위 상속관계에서 적용된다. 같은 클래스 내에서 적용된다.

 

 

 

※ 출처: Inflearn 김영한-Java 강의 중

https://hyoje420.tistory.com/14