Overriding
)부모 클래스로부터 상속받은 메서드의 내용을 재정의 하는 것
(부모 클래스의 메서드를 그대로 사용해도 되지만 자식 클래스의 상황에 맞게 변경해야하는 경우 오버라이딩을 한다.)
👉 오버라이딩 조건 👈
1. 선언부가 부모 클래스의 메서드와 일치해야한다.
2. 접근 제어자를 부모 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
public class Car {
String company;
private String model;
private String color;
private double price;
double speed;
char gear = 'P'; // 기어의 상태: P,R,N,D
boolean lights;
(...)
public void horn() {
System.out.println("빵빵");
}
}
-------
public class SportsCar extends Car{
String engine;
public void booster() {
System.out.println("부앙~");
}
(...)
@Override
public void horn() {
booster();
}
}
---
public class Main {
public static void main(String[] args) {
Car car = new Car();
car.horn(); // OUTPUT: 빵빵
SportsCar sportsCar = new SportsCar();
// 오버라이딩한 horn() 메서드 호출
sportsCar.horn(); // OUTPUT: 부앙~
}
}
Super
부모 클래스의 멤버를 참조할 수 있는 키워드
(this 친구)
// 부모 클래스 Car
String model; // 자동차 모델
String color; // 자동차 색상
double price; // 자동차 가격
----
// 자식 클래스 SportsCar
String model = "SantaFe"; // 자동차 모델
String color = "Black"; // 자동차 색상
double price = 30000000; // 자동차 가격
----
public void setCarInfo(String model, String color, double price) {
super.model = model; // model은 부모 필드에 set
super.color = color; // color는 부모 필드에 set
this.price = price; // price는 자식 필드에 set
}
자식 클래스의 메서드를 호출하면 super
키워드로 접근한 부모 클래스이 model
, color
필드에 매개변수의 값이 저장되고, this
키워드로 접근한 자식 클래스의 price 필드에 매개변수 값이 저장된다.
super()
부모 클래스의 생성자를 호출할 수 있는 키워드이다.
this
와 매한가지)