hoon's bLog

Java class extends 자바 클래스 상속 본문

IT/Java

Java class extends 자바 클래스 상속

개발한기발자 2021. 1. 6. 12:22
반응형

안녕하세요!

이번 시간에는 클래스의 상속에 대해서 좀 더 심도 있게 알아보도록 하겠습니다.

후에 배우실 인터페이스와 헷갈리시지 않도록, 상속에 대해서 잘 정리하고 가시길 바랍니다!!

그럼 상속에 대해서 알아보겠습니다.

상속(inheritance)이란?

상속(inheritance)은 추상화,

캡슐화와 더불어 객체 지향 프로그래밍을 구성하는

중요한 특징 중 하나입니다.

상속은 사용자에게 높은 수준의 코드 재활용성을 제공하며,

클래스 간의 계층적 관계를 구성한다.

상속의 장점

자바에서 클래스의 상속은 다음과 같은 장점을 가집니다.

 

1. 기존에 작성된 클래스를 재활용할 수 있습니다.

2. 자식 클래스 설계 시 중복되는 멤버를 미리 부모 클래스에 작성해 놓으면,

   자식 클래스에서는 해당 멤버를 작성하지 않아도 됩니다.

3. 클래스 간의 계층적 관계를 구성함으로써 다형성의 기반을 마련합니다.

자식 클래스(child class)

자식 클래스(child class)란 부모 클래스의 모든 특성을 물려받아 새롭게 작성된 클래스를 의미합니다.

자바에서 자식 클래스는 다음과 같은 문법을 통해 선언합니다.

문법

class 자식클래스이름 extends 부모클래스이름 { ... }

 

다음 그림은 부모 클래스와 자식 클래스 간의 포함 관계를 나타낸 그림입니다.

이처럼 부모 클래스는 자식 클래스에 포함된 것으로 볼 수 있습니다.

따라서 부모 클래스에 새로운 필드를 하나 추가하면,

자식 클래스에도 자동으로 해당 필드가 추가된 것처럼 동작합니다.

 

자식 클래스에는 부모 클래스의 필드와 메서드만이 상속되며, 생성자와 초기화 블록은 상속되지 않습니다.

또한, 부모 클래스의 접근 제어가 private이나 default로 설정된 멤버는 자식 클래스에서 상속받지만,

접근할 수는 없습니다.

 

class Parent {
        private int a = 10; // private 필드
        public int b = 20; // public 필드
}

class Child extends Parent {
        public int c = 30; // public 필드
        void display() {
                ① // System.out.println(a); // 상속받은 private 필드 참조
                ② System.out.println(b); // 상속받은 public 필드 참조
                ③ System.out.println(c); // 자식 클래스에서 선언한 public 필드 참조
        }
}

public class Inheritance01 {
        public static void main(String[] args) {
                Child ch = new Child();
                ch.display();
        }
}

//실행 결과
//20
//30

위 예제의 ②번 라인에서는 자식 클래스의 메소드에서 부모 클래스에서, 상속받은 public 필드를 참조하고 있습니다.

 

이처럼 자식 클래스에서 따로 선언하지 않은 필드라도,

해당 이름의 필드를 부모 클래스에서 상속받았다면, 문제가 없습니다.

하지만 주석 처리된 ①번 라인처럼 해당 필드가 부모 클래스의 private 필드라면 접근할 수 없으므로,

오류를 발생시킬 것입니다.

또한, 자식 클래스에서는 ③번 라인처럼 자신만의 필드나 메서드를 선언하여 사용할 수 있습니다.

자바에서 클래스는 단 한 개의 클래스만을 상속받는 단일 상속만이 가능합니다.

Object 클래스

자바에서 Object 클래스는 모든 클래스의 부모 클래스가 되는 클래스입니다.

따라서 자바의 모든 클래스는 자동으로 Object 클래스의 모든 필드와 메서드를 상속받게 됩니다.

 

즉, 자바의 모든 클래스는 별도로 extends 키워드를 사용하여 Object 클래스의 상속을 명시하지 않아도 Object 클래스의 모든 멤버를 자유롭게 사용할 수 있습니다.

자바의 모든 객체에서 toString()이나 clone()과 같은 메소드를 바로 사용할 수 있는 이유가 해당 메서드들이 Object 클래스의 메서드이기 때문입니다.

다음 포스팅에서는 인터페이스에 대해서, 보다 더 자세하게 알아보도록 하겠습니다.

읽어주신 여러분 감사합니다!

 

출처 : 자바의 정석 3rd Edition 내용 정리

728x90
반응형