Class Override
- Java19 클래스의 상속과 다형성에서 사용했던 class들을 보자
- 상위 클래스 Car의 메소드 putSpec을 하위 클래스 ExCar에서 새롭게 정의하는 것을 '오버라이드 한다'라고 표현한다.
- ExCar에서는 추가 및 수정된 필드, 메서드만 선언한다. 이를 증분 프로그래밍(incremental programming)이라고 한다.
Car 클래스
class Car{
private String name;
private int width; //폭
private int height; //높이
private int length; //길이
private double x; // x좌표
private double y; //y좌표
private double fuel; //남은 연료
private Day purchaseDay;
Car(String name, String number, int width, int length, int height, double tankage, double fuel, double mileage, Day purchaseDay){
this.name = name;
this.width = width;
this.height = height;
this.length = length;
this.x = 0; this.y = 0;
this.fuel = fuel;
x = y = 0.0;
this.purchaseDay = new Day(purchaseDay);
} // Car 생성자
public void putSpec() {
System.out.println("이름: "+ name);
System.out.println("전폭: "+ width+"mm");
System.out.println("전고: "+ height+"mm");
System.out.println("전장: "+ length+"mm");
}
} //Car 본체
ExCar 클래스 - Car 의 자식 클래스
public class ExCar extends Car{ // Car의 자식 클래스 ExCar
private double totalMileage; // 총 주행거리
// --- 생성자 --- //
public ExCar ( String name, int width, int height, int length, double fuel, Day purchaseDay) {
super(name, width, height, length, fuel, purchaseDay);
totalMileage = 0.0;
}
public void putSpec() { // 사양 표시
super.putSpec();
System.out.printf("총 주행 거리: %.2fkm\n", totalMileage);
}
} // ExCar
- Car형의 메서드 putSpec 호출시와 ExCar형의 putSpec 호출시
public static void main(String[] args) {
Car sonata = new Car("Sonata", 1860, 2840, 1445, 90.0, new Day(2019, 10, 10));
sonata.putSpec();
ExCar myCar = new ExCar("Genesiss", 1845, 1500, 5300, 90.0, new Day());
myCar.putSpec();
}
결과
이름: Sonata
전폭: 1860mm
전고: 1445mm
전장: 2840mm
이름: Genesiss
전폭: 1845mm
전고: 5300mm
전장: 1500mm
총 주행 거리: 0.00km
어노테이션 Annotation
- ExCar 클래스의 putSpec을 잘못 정의하여 putSpac라고 하면, 컴파일러는 새로운 메소드를 선언한 것으로 인식한다.
- 이러한 오류를 줄이기 위해서 메서드 선언 이름 앞에
@Override
를 선언해준다. 그러면 컴파일러는 상위 클래스에서 동일한 이름의 메소드가 있는지 확인하고, 없다면 컴파일 오류를 반환한다.
@Override
public void putSpec() { // 사양 표시
super.putSpec();
System.out.printf("총 주행 거리: %.2fkm\n", totalMileage);
}