오버로딩과 오버라이딩

그나·2024년 8월 28일

오버로딩(Overloading)

메서드의 이름은 같고 매개변수의 유형과 개수가 다르도록 하는 것을 의미한다.

→ 기존에 없던 새로운 메서드를 정의하는 것이다.

class OverloadingMethods{
		public void print(){
				System.out.println("오버로딩1");
		}
		
		String print(Integer a){
				System.out.println("Integer -오버로딩2");
				 return a.toString();
		}
		
		void print(String a){
				System.out.println("String - 오버로딩3");
				System.out.println(a);
		}
		
		String print(Integer a , Integer b){
				System.out.println("Integer , Integer - 오버로딩4");
				return a.toString() + b.toString();
		}
}

class OverloadingTest{
	
	public static void main(String[] args){
		OverloadingMethods om = new OberloadingMethods();
		
		om.print();
		System.out.println(om.print(3));
		om.print("Hello");
		System.out.println(om.print(4,5));
		
	}
}

-> 실행결과
오버로딩1
Integer - 오버로딩2
3
String - 오버로딩3
Hello
Integer , Integer - 오버로딩4
45

매서드의 이름을 중복하여 사용할 수 있다는 장점이 있다.

오버로딩은 매개변수의 타입이 달라야하며 , 매개변수의 개수가 달라야하며 , 매개변수의 순서가 달라야 사용할 수 있다

오버라이딩(Overriding)

상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용하는 것을 의미한다.

(메서드의 이름은 물론 파라미터의 개수나 타입도 동일해야하며 , 주로 상위 클래스의 동작을 상속받는 하위 클래스에서 변경하기 위해 사용된다)

→ 즉 오버라이딩은 상속받은 메서드의 내용만 변경하는 것이다.

메서드의 이름이 서로 같고 , 매개변수가 같고 , 반환형이 같을 경우에 상속받은 메서드를 덮어 쓴다

class SuwonMember{
	String test(){
		return "저는 수원에 거주중입니다"
	}
}

class SuwonMember extends SuwonMember{
'extends SuwonMember를 통해 부모클래스를 상속을 받는'
	String test(){
		return "저는 수원 입니다"
	}
}

public class OverridingTest{
	
	public static void main(String[] args){
		SuwonMember sm = new SuwonMember();
		
		System.out.println(sm.test());
	}
}

주의 할 점

자식 클래스에서 오버라이딩하는 메소드의 접근 제어자는 부모 클래스보다 더 좁게 설정할 수 없다.

예외는 부모 클래스의 메소드보다 많이 선언 할 수 없다.

static 메서드를 인스턴스의 메서드로 또는 그 반대로 바꿀 수 없다.

(상위 클래스의 static 메서드는 클래스에 속하는 메서드이기 때문에 상속되지 않고 따라서 오버라이딩 되지 않는다 또한 final이 지정된 메서드 역시 오버라이딩이 불가능하다.

private 접근 제어자를 가진 메서드는 상속 자체가 불가능하기 때문에 오버라이딩이 성립되지 않는다).

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

오버라이딩

접근제어자 : 부모 클래스의 메소드의 접근 제어자보다 더 넓은 범위의 접근 제어자를 자식 클래스의 메소드에서 설정 할 수 있다

리턴형:동일해야 한다.

메소드명 :동일해야 한다.

매개변수 :동일해야한다.

적용범위 :상속관계에서 적용된다

오버로딩

접근 제어자 :모든 접근 제어자를 사용할 수 있다

리턴형:달라도 된다.

메소드명 :동일해야 한다.

매개변수 :달라야 한다.

적용범위 :같은 클래스 내에서 적용된다.

profile
비전공자의 뚝딱이의 우탕탕 공부

0개의 댓글