extends 키워드를 사용한다.<부모 클래스>
public class Car {
public void move() {
System.out.println("차가 이동합니다.");
}
}
<자식 클래스>
public class ElectricCar extends Car {
public void charge() {
System.out.println("충전합니다.");
}
}
Car 클래스를 상속 받았기 때문에 move 란 메서드를 자식클래스에서 사용할 수 있다.
ElectricCar 란 자식클래스로 인스턴스를 생성하면 상속받은 부모 클래스의 인스턴스도 자식 인스턴스의 참조값 위치에 생성된다. 다음 그림과 같다.
자식 클래스의 인스턴스만 생성했는데도 x001 이라는 참조값에 부모 클래스의 인스턴스가 생성됨을 알 수 있다. 하지만 가리키는 것은 생성된 인스턴스의 변수타입인 ElectricCar 를 가리킨다.
생성된 인스턴스에서 메서드를 호출하면 가리키고 있는 클래스의 안에서 메서드를 찾고 없으면, 부모 클래스 내에서 찾게된다.
부모클래스에서 상속받은 메서드를 사용할 때 메서드 이름은 같지만 새로운 기능을 추가하고 싶다면 자식이 새로 재정의 할 수 있다. 이를 오버라이딩이라 한다.
public class ElectricCar extends Car {
@Override
public void move() {
System.out.println("전기차를 빠르게 이동합니다.") // 오버라이딩 하여 출력 내용을 추가함.
}
public void charge() {
System.out.println("충전합니다.");
}
}
만약 다른 패키지의 클래스를 상속한다면, 상속받을 부모 클래스가 public 또는 protected 의 접근 제어자일때만 가능하다.
위 예시를 보면 오버라이딩하여 자식 클래스와 부모 클래스 둘 다 move 란 메서드가 존재한다. 근데 자식 클래스로 인스턴스를 생성했기에 해당 참조값은 자식 클래스의 move 메서드를 가리킨다. 만약 부모 클래스의 move 메서드를 사용하고 싶다면 super 키워드를 사용하면 된다.
public class ElectricCar extends Car {
@Override
public void move() {
System.out.println("전기차를 빠르게 이동합니다.") // 오버라이딩 하여 출력 내용을 추가함.
}
public void call() {
super.move() // 부모의 move 메서드 사용
move() // 자식 즉, 해당 인스턴스의 메서드 사용