오버로딩과 오버라이딩
오버로딩(Overloading)은 한 클래스 내에서, 같은 이름의 메서드를 여러 개 정의하는 것
오버라이딩(Overriding)은 부모클래스로부터 상속 받은 메서드를 자식클래스에서 재정의하는 것
오버로딩(Overloading)
- 메서드 이름이 같고, 매개변수의 개수나 타입(순서)이 다른 메서드를 여러개 정의하는 것
- 메서드 오버로딩을 사용함으로써 메서드 이름을 절약할 수 있다.
- 같은 기능을 하는 메서드를 하나의 이름으로 사용할 수 있다.
- 오버로딩의 조건
- 메서드 이름이 같아야 한다.
- 메서드 매개변수(파라미터)의 개수가 달라야 한다.
- 매개변수의 개수가 같다면 타입(순서)이 달라야 한다.
- ‘리턴(반환) 타입’ 만 다른 것은 오버로딩 X
- ‘접근제어자’ 만 다른 것은 오버로딩 X
class Overloading{
//오버로딩 성공
public int add(int a, int b){
return a + b;
}
public int add(int a, int b, int c) { //매개변수의 개수가 다른 경우
return a + b + c;
}
public double add(double a, double b) { //매개변수의 타입이 다른 경우
return a + b;
}
public double add(double a, int b, int c) { //매개변수의 개수, 타입이 다른 경우
return a + b + c;
}
//컴파일 오류 - 오버로딩 X
/*
public double add(int a, int b) { //리턴(반환) 타입만 다르면 오버로딩 X
return a + b;
}
protected int add(int a, int b) { //접근제어자만 다르면 오버로딩 X
return a + b;
}
*/
}
public class Test {
public static void main(String[] args) {
Overloading ol = new Overloading();
System.out.println(ol.add(1, 2));
System.out.println(ol.add(1, 2, 3));
System.out.println(ol.add(1.0, 2.0));
System.out.println(ol.add(1.0, 2, 3));
}
}
/*
실행 결과
----------
3
6
3.0
6.0
*/
오버라이딩(Overrding)
- 부모클래스로부터 상속받은 메서드를 자식 클래스에서 재정의하는 것
- 메서드 이름, 매개변수, 리턴값이 모두 동일
- @Override 애노테이션을 사용한다.
- 오버라이딩의 조건
- 메서드 이름이 같아야 한다.
- 메서드 매개변수(파라미터)의 개수, 순서, 타입이 같아야 한다.
- 리턴(반환) 타입이 같아야 한다.
- 접근제어자가 부모 클래스의 메서드보다 더 제한적이면 안된다.
- ex1) 부모 클래스의 메서드 protected, 자식 클래스의 메서드 public O
- ex2) 부모 클래스의 메서드 protected, 자식 클래스의 메서드 private X
- static, final, private 가 붙은 메서드는 오버라이딩 불가
- 생성자는 오버라이딩 불가
public class Car {
public void move() {
System.out.println("차를 이동합니다.");
}
}
public class ElectricCar extends Car {
@Override
public void move() {
System.out.println("전기차를 빠르게 이동합니다.");
}
}
public class CarMain {
public static void main(String[] args) {
Car car = new Car();
car.move();
ElectricCar electricCar = new ElectricCar();
electricCar.move();
}
/*
실행결과
---------
차를 이동합니다.
전기차를 빠르게 이동합니다.
*/
'Development > Java' 카테고리의 다른 글
[Java] 자바 Queue에 x, y 값 두 개 삽입(Pair 클래스, Point 클래스) (0) | 2024.08.23 |
---|---|
[Java] 빠른 입출력 BufferedReader & BufferedWriter (0) | 2024.06.19 |
[Java] JDK 버전 여러 개 전환하며 사용하기 (0) | 2024.05.13 |
[Java] Math 클래스 (0) | 2024.04.17 |