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

hyun·2023년 3월 8일
0

오버로딩이란?

공통 기능의 함수를 하나의 이름으로 묶어주는 것을 말한다

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

위 예제는 print라는 같은 이름을 가진 네개의 메소드가 매개변수의 개수와 타입를 다르게 지정하여 지정하는 것이 가능하지만 '리턴 값'만 다르게 지정하는 것은 오버로딩할 수 없다.
즉 오버로딩은 매개변수의 차이로만 구현할 수 있다

오버로딩을 사용하는 이유는 동일한 기능을 하는 메서드를 하나의 이름으로 처리할 수 있고 메소드의 이름을 절약할 수 있기 때문이다.

오버라이딩이란?

부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것

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() {    ★여기서 default은 아무것도 적지 않아도 된다.   
		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("훌쩍훌쩍");
	}
}

오버라이딩은 재정의 하려는 메서드의 파라미터값을 변경해서도 안되고 이름을 변경해서도 안된다.
또한 부모 클래스의 메서드보다 자식 클래스의 메서드 접근제한이 동일 하거나 넓어야 한다.
즉 자식 클래스의 메서드가 부모 클래스의 메서드를 대체할 수 있어야 한다.
※접근 영역: public > protected > default > priva
ex) 부모클래스에서 protected가 선언되면 protected보다 좁은 private나 default는 올 수 없다

오버라이딩을 사용하는 이유는자식클래스가 부모클래스의 메서드를 상속 받아도 다른 기능을 사용할 수 있기 때문이다.

profile
초보 개발자

0개의 댓글