오버라이딩(Overriding)과 오버로딩(Overloading) 차이점에 대한 개요
- 공통점은 클래스의 인스턴스 멤버인 메소드를 재정의 또는 확장의 개념
- Overriding
- 상위 클래스에 있는 메소드를 하위 클래스에서 재정의 하는 것
- 부모 클래스의 상속을 받은 자식 클래스에서 확장
- Overloading
- 매개변수의 개수나 타입을 다르게 하여 같은 이름의 메소드를 여러 개 정의하는 것
- 하나의 클래스 내부에서 확장
오버라이딩(Overriding)
- 자식 클래스에서 물려 받은 메소드를 재정의하거나 기능을 추가
- 조건
- 메소드의 이름이 일치해야함
- 메소드의 매개변수의 개수, 순서, 데이터 타입이 일치해야함
- 메소드의 return타입이 일치해야함
class Car {
int speed = 0;
public int setSpeed(int speed_change) {
this.speed += speed_change;
return this.speed;
}
}
class Sonata extends Car {
final int MAX_SPEED = 150;
public int setSpeed(int speed) {
this.speed += speed;
if (this.speed > MAX_SPEED) {
this.speed = MAX_SPEED;
}
return this.speed;
}
}
public class CarOverridingTest {
public static void main(String[] args) {
Car car = new Car();
car.setSpeed(30);
Sonata sonata = new Sonata();
sonata.setSpeed(180);
}
}
오버로딩(Overloading)
- 같은 클래스 내부에서 메소드를 확장하기 위한 개념
- 조건
- 메소드 이름이 일치해야함
- 메소드 매개변수의 개수 또는 타입이 달라야함
- return 타입이 달라야함
class Car {
int modelNum;
String model;
public int setModel(int modelNum) {
this.modelNum = modelNum;
return this.modelNum;
}
public String setModel(int modelNum, String brand) {
this.model = brand + modelNum;
return this.model;
}
}
public class CarOverloadingTest {
public static void main(String[] args) {
Car car = new Car();
car.setModel(7362); // 7362
car.setModel(2407, "sonata"); // sonata2407
}
}
출처)
https://velog.io/@god1hyuk/Javaclass-%EC%98%A4%EB%B2%84%EB%9D%BC%EC%9D%B4%EB%94%A9overriding%EA%B3%BC-%EC%98%A4%EB%B2%84%EB%A1%9C%EB%94%A9overloading