728x90
오버로딩(OverLoading)
- 같은 이름의 함수(메서드)를 여러 개 생성하는 것이다
- 기존에 없는 새로운 메서드를 정의하는 것이다
- 리턴(반환) 타입이 달라도 상관이 없다
- 메서드의 이름이 같을 때 메서드의 파라미터의 개수나 타입이 달라야 한다
하단 코드를 실행하면 오른쪽과 같은 결과가 나옴을 확인할 수 있다.
l은 long형의 리터럴 표기를 위해서 사용했다.
import java.io.IOException;
import java.util.List;
public class Main {
public static void main(String[] args) throws IOException {
System.out.println(sum(List.of(1,2)));
System.out.println(sum(1, 2));
System.out.println(sum(1l, 2l));
}
private static int sum(List<Integer> arr) {
System.out.println("sum1");
return arr.stream().mapToInt(i -> i).sum();
}
private static int sum(int a, int b) {
System.out.println("sum2");
return a+b;
}
//반환타입이 달라도 된다. 여기서 반환타입이 int로 변해도 가능하다(파라미터 타입이 달라서)
private static long sum(long a, long b) {
System.out.println("sum3");
return a+b;
}
/*
오버로딩 되지 않는다(파라미터 타입이 일치한다)
private static long sum(int a, int b) {
return a+b;
}
*/
}
오버 라이딩 (Overriding)
- 이미 있는 함수를 상속받아서 메서드를 구현하는 것이다
- 리턴 타입이 동일하다
- 상속받은 메서드의 내용을 변경하는 것이다
- 오버 라이딩의 조건
- 이름이 같아야 한다
- 매개변수가 같아야 한다
- 반환 타입이 같아야 한다
- 접근 제어자는 조상 클래스의 메서드 보다 좁게 변경할 수 없다(조상이 protected 라면 자손은 protected나 public 이어야 한다)
- 조상클래스 보다 많은 예외를 선언할 수 없다
- 오버 라이딩의 예시
조상 클래스로 vehicel (운송수단)이라는 클래스가 있다고 가정하자
이때 자손클래스로 car, bike, airplane 등이 있을 수 있다 (상속)
이때 vehicle에서 1km당 사용되는 기름의 양을 표기하는 oil()이라는 메서드를 가지고 있다고 가정할 때 각 자손 클래스에(car, bike, airplane)에서 oil메서드를 재정의 하여 사용한다. 이때 사용하는 것이 오버라이딩이다
class Vehicle {
public String oil() {
return "아직 정의 되지 않음";
}
}
class Bike extends Vehicle {
@Override
public String oil() {
return "3씩 사용한다.";
}
}
class Car extends Vehicle {
@Override
public String oil() {
return "5씩 사용한다.";
}
}
class AirPlane extends Vehicle {
@Override
public String oil() {
return "10씩 사용한다.";
}
}
public class Main {
public static void main(String args[]) {
Vehicle vehicle = new Vehicle();
Car car = new Car();
Bike bike = new Bike();
AirPlane airPlane = new AirPlane();
System.out.println(vehicle.oil());
System.out.println(bike.oil());
System.out.println(car.oil());
System.out.println(airPlane.oil());
}
}
실제 코드에서는 다음과 같이 사용된다.
static class Node implements Comparable<Node> {
private int index;
private int distance;
public Node(int index, int distance) {
this.index = index;
this.distance = distance;
}
@Override //객체를 비교하는 부분을 오버라이딩
public int compareTo(Node other) {
if (this.distance < other.distance) {
return -1;
} else return 1;
}
}
참고
자바의 정석(3판)
728x90
'JAVA' 카테고리의 다른 글
람다식(Lambda Expression) (1) | 2023.03.08 |
---|---|
Enum 클래스 (0) | 2023.02.28 |
ArrayList와 LinkedList (0) | 2023.02.24 |
Array 배열 복사의 4가지 방법 (0) | 2023.02.10 |
JAVA 자료형 범위 (0) | 2022.10.03 |
댓글