메서드의 이름은 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것을 의미한다. 리턴값만 다르게 작성하는 것은 안된다.
public static int add(int a, int b){ return a+b; } public static float add (float a, float b){ return a+b; }
상위 클래스의 메서드를 하위 클래스가 재정의 하는 것이다. 메서드의 이름은 물론 파라메터의 갯수나 타입도 동일해야 하며, 주로 상위 클래스의 메서드를 상속받은 하위 클래스에서 변경하기 위해 사용된다.
public class Main { public static void main(String[] args) { Person person1 = new Police(); Person person2 = new Doctor(); person1.define(); // 출력: "I am Police" person2.define(); // 출력: "I am Doctor" } } class Person { void define() { System.out.println("I am Person"); } } class Police extends Person { @Override void define() { System.out.println("I am Police"); } } class Doctor extends Person { @Override void define() { System.out.println("I am Doctor"); } }
오버로딩(Overloading)은 기존에 없던 새로운 메서드를 정의하는 것이고,
오버라이딩(Overriding)은 상속 받은 메서드의 내용만 변경 하는 것이다.
구분 | 오버로딩 | 오버라이딩 |
---|---|---|
메소드 이름 | 동일 | 동일 |
매개변수, 타입 | 다름 | 동일 |
리턴타입 | 상관 없음 | 동일 |