상속의 사전적 의미
상속이란 사람의 사망에 의한 재산 및 신분상의 지위의 포괄적인 승계를 말한다.
JAVA 에서의 상속
JAVA에서의 상속의 의미 또한 비슷하다.
부모 클래스로부터 상속받은 자식클래스는 부모 클래스의 변수, 메소드 등을 자신의 것처럼 사용할 수 있다.
상속성의 프로그래밍 예시로 교통수단을 들어보겠다.
교통수단 -> 열차 -> KTX
열차 클래스는 교통수단이라는 클래스로부터 상속을 받고
KTX는 열차 클래스로부터 상속 받는다.
이 관계를 그림으로 표현해 보았다.
1번
2번
흔히 일반적으로 상속받는다는 의미를 보면 2번 그림이 맞는 것 같지만,
JAVA 에서는 부모클래스의 자원을 자식클래스에서 재사용을 하기 때문에
(KTX 클래스가 교통수단과 열차 클래스의 변수, 메소드를 사용할 수 있기 때문에)
1번 그림처럼 자식클래스가 부모클래스를 포함하는 것이 올바른 그림이다.
extends
JAVA에서 상속의 대표적인 형태이다.
부모 클래스의 메소드를 자식 클래스에서 그대로 사용할 수 있으며,
오버라이딩할 필요 없이 부모 클래스에 구현되어있는 것을 그대로 사용 가능하다.
아래 예시는 extends를 사용한 게임 케릭터 예시이다.
class Human {
public int healthPoint = 100;
}
// human 클래스를 상속받은 Warrior 클래스
class Warrior extends Human {
public void getHealthPoint() {
System.out.println(healthPoint);
}
}
public class CodeReader{
public static void main(String []args){
Warrior warrior = new Warrior();
warrior.getHealthPoint();
}
}
RESULT
Human 클래스(부모)에서 선언했던 health point를 전사 클래스(자식)에서는 따로 선언을 하지않아도 사용할 수 있다.
JAVA 에서 상속을 사용할 때 주의해야할 점이 있다.
바로 "다중 상속" 을 지원하지 않는다는 것인데,
이 것은 아래의 예시와 같다.
public class Son extends Father, Mother {
JAVA 에서는 위처럼 선언하여 사용할 수 없다.
이런 문제를 해결하기 위해서 나온 것이 implements 이다.
// Father interface에는 힘 스탯이 8이다.
interface Father {
public int strength = 8;
public void getStrength();
}
// Mother interface에는 스피드 스탯이 10이다.
interface Mother {
public int speed = 10;
public void getSpeed();
}
// Son 클래스는 Father, Mother 인터페이스를 상속한다.
class Son implements Father, Mother {
// 상속받은 Mother 클래스의 메소드를 override 하여 재정의 해야한다.
@Override
public void getStrength () {
System.out.println(strength);
}
// 상속받은 Mother 클래스의 메소드를 override 하여 재정의 해야한다.
@Override
public void getSpeed() {
System.out.println(speed);
}
}
public class CodeReader{
public static void main(String []args){
Son son = new Son();
son.getStrength();
son.getSpeed();
}
}
위 예시와 같이 implements 를 사용하게 되면 두 가지 interface에서 선언했던 메소드를 override로 재정의하여 사용할 수 있다.
요약
참고:
https://zbomoon.tistory.com/13
https://velog.io/@hkoo9329/%EC%9E%90%EB%B0%94-extends-implements-%EC%B0%A8%EC%9D%B4
https://commin.tistory.com/101
https://reakwon.tistory.com/27