상속이란?
다음 대에 무엇을 물려주는 행위를 말하는데 객체지향 프로그래밍에서 상속은 어떤 특성들을 물려받는 의미이다.
어떤 특성이라 함은 공통적인 특성을 의미한다.
예를 들어, 사람의 경우 부모는 자식에게 유전자를 물려주게 되는데 유전자의 영향에 따라 부모의 특성이 자손에게 전달된다.
자바에서는 다른 클래스의 특성을 이어받아 클래스를 만드는 것이 가능하다. 이것이 상속이다.
다른 클래스를 상속받은 클래스를 '서브 클래스'라고 한다. 서브 클래스는 (파생 클래스 or자식 클래스)라고 부르기도 한다.
그리고 자신을 상속해준 클래스는 슈퍼 클래스(부모 클래스or기본 클래스)라고 부른다.
A 클래스가 B 클래스에 상속해주고 B클래스는 C 클래스에 상속해주는 것이 가능하다.
이렇게 상속을 하게되면 코드를 다시 만들지 않아도 이미 있는 코드를 재활용할 수 있다.
자식 클래스는 필드, 메서드, 중첩 클래스를 부모 클래스로부터 상속받을 수 있다.
생성자는 상속 받을 수 없지만 자식 클래스에서 부모 클래스의 생성자를 호출할 수 있다.
상속을 할때 부모 클래스의 변수나 메서드의 접근 제어자가 public이나 protected의 경우에만 상속받을 수 있다.
하지만 자식 클래스와 부모 클래스가 동일한 패키지에 있으면 접근 제어자를 지정하지 않아도 된다.
자식클래스에서는 부모 클래스에 없는 필드나 메서드를 선언할 수 있다. 부모 클래스에서 상속받은 메서드는 바로 사용할 수 있다. 부모 클래스의 인스턴스 메서드(클래스 메서드가 아님)의 경우에는 자식 클래스에서 다시 정의해서 사용할 수 있다. 이를 '오버 라이딩(overriding)'이라고 한다.
자식 클래스에 부모 클래스와 동일한 명칭의 클래스 메서드가 있다면, 부모 클래스의 것은 사용할 수 없다.
자식 클래스에서는 부모 클래스의 생성자를 호출할 수 있으며 이때에는 super 키워드를 사용할 수도 있다. 부모 클래스의 private 접근 제어자로 선언된 필드는 자식 클래스에서 접근할 수 있다.
간단한 예제
Car.java(부모 클래스)
부모클래스는 인스턴스 메서드만 선언하고 main 메서드도 없이 그냥 하나의 클래스이다.
Bmw320d.java(자식 클래스)
자식 클래스에서는 부모클래스를 상속 받아서 부모 클래스의 메서드를 Override하고 있다.
결과적으로 메인 메서드에서 Car클래스 타입의 child 객체를 Bmw로 생성 할수있다는 것이다.
실행 화면
child.printCarName()은 new Bmw320d의 객체안의 메서드이기 때문에 '차명은 BMW 320d입니다.'라는 결과창이 나온다.
Car.printCarType();은 Car라는 부모 클래스를 직접 호출하여 사용하기 때문에 '차종은 CarType 입니다.' 결과창이 나온다.
Bmw320d.printCarTpype()도 자식 클래스를 직접 바로 호출하기 때문에 '차종은 세단 입니다'라는 결과창이 나온다.
'IT > JAVA' 카테고리의 다른 글
JVM이란? / JVM의 구조 - 사좋배 공유 (0) | 2019.07.29 |
---|---|
[JAVA] 자바 인터페이스(interface) 자바 - 사좋배 공유 (0) | 2019.05.01 |
[JAVA] 자바 접근 제어자란? 접근제어자의 종류 - 사좋배 공유 (0) | 2019.05.01 |
[JAVA] 자바 클래스란? 클래스의 기본 예제 (예제파트)자바 - 사좋배 공유 (0) | 2019.04.30 |
[JAVA] 자바 클래스란? 클래스의 기본 개념 (개념파트)자바 - 사좋배 공유 (0) | 2019.04.28 |