오버로딩 (Overloading)
- 같은 메소드 이름을 사용하더라도 매개변수만 다르면 사용할 수 있는 기능
- 호출 매개변수에 따라 해당하는 메서드를 실행시킨다
EX) void print() { System.out.print("프린트") }
void print(String name) { System.out.print("프린트" + name) } 가능
String print(String name) { System.out.print("프린트" + name) } // 위와 메소드 명 및 파라미터가 일치함으로 불가능
String print(String name, int age) {{ System.out.print("프린트" + name) + age }} 가능
오버라이딩 (Overriding)
- 상속 관계에 있는 클래스 간에 같은 이름의 메소드를 정의하는 기능
- 오버라이드 하고자 하는 메소드가 상위 클래스에 존재해야 한다.
- 메소드 파라미터 개수, 파라미터 자료형이 같아야 한다.
- 메소드 리턴형이 같아야 한다.
- 상위 메소드와 동일하거나 내용이 추가 되어야 한다.
- 접근 제한을 더 강하게 오버라이딩 할 수 없다 EX) 부모가 public 접근 제한을 가지고 있을 경우 오버라이딩 하는 자식 메소드는 default 나 private 접근 제한으로 수정 할 수 없다.
EX)
public class Move {
private int count = 0;
public void go() {
System.out.println("Move GO : " + ++this.count);
}
}
---------------------------------------------------------------------------------------------
public class Car extends Move{
private String name;
public Car(String name) {
this.name = name;
}
@Override
public void go() {
System.out.println("Car go : "+ this.name);
}
public static void main(String[] args) {
Move move = new Move();
move.go(); // Move GO : 1
Car car = new Car("BMW");
car.go(); // Car go : lee
}
}