프로그래밍 언어/Java

[JAVA] 오버로딩 vs 오버라이딩

반응형

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

 


오버로딩(Overloading) : 기존에 없는 새로운 메서드를 정의하는 것(new)

메소드의 이름은 동일하나 매개변수의 갯수나, 타입이 다르다.

즉, 타입이 다른 매개변수로 호출을 하기 때문에 새로운 메서드이다.

 

오버라이딩(Overriding) : 상속받은 메서드의 내용을 변경하는 것(change, modify)

상속받은 클래스에서 상속받은 메서드를 새로 재정의하여 사용.

상속을 받았는데 상속받은 메서드의 기능이 부족해서 자식 클래스에서 해당 메서드를 수정하여 새로운 기능을 추가하여 사용한다. 오버라이딩시 메모리영역에 새로 들어간다.

 

오버로딩과 오버라이딩 차이점

구분 오버로딩 오버라이딩
메서드 이름 동일 동일
매개변수, 변수타입 다름 동일
리턴 상관없음 동일

 

오버로딩(Overloading)

class Overloading{
	public void method() {
		System.out.println("매개변수가 없는 method()");
	}
	public void method(int a) {
		System.out.println("매개변수 int형을 가진 method()");
	}
	public void method(String a) {
		System.out.println("매개변수 String형을 가진 method()");
	}
}
public class Main {
	public static void main(String[] args) {
		Overloading over = new Overloading();
		over.method();
		over.method(1);
		over.method("hello world");
	}
}

오버로딩(Overloading) 실행 결과

매개변수가 없는 method()
매개변수 int형을 가진 method()
매개변수 String형을 가진 method()

 

오버라이딩(Overriding)

Parent Class

public class Parent {
	public void parentMethod() {
		System.out.println("Parent parentMethod()");
	}
	
	public void parentProcess() {
		System.out.println("Parent pProcess()");
	}
}

Child Class

public class Child extends Parent {
	public void parentMethod() { //Overriding
		System.out.println("Child parentMethod()");
	}
	
	public void childMethod() {
		System.out.println("Child Method()");
	}
}

Main

public class MainClass {

	public static void main(String[] args) {
		Child c = new Child();
		//상속받았으니 부모의 메서드는 당연히 실행이 된다.
        c.parentProcess(); //상속받은 메서드	
		c.parentMethod(); //오버라이딩된 메서드 	
		c.childMethod(); //Child 메서드
	}

}

오버라이딩(Overriding) 실행결과

Child parentMethod()
Parent pProcess()
Child func()

 

 

반응형