[JAVA] 클래스의 상속 1 : 기본 (자바 독학하기16)
상속의 목적은 다음과 같다.
- 연관된 일련의 클래스들에 대해 공통적인 규약을 정의
이 내용은 상속을 배워가면서 차차 생각해 나가야 한다.
상속의 가장 단순한 설명은 다음과 같다.
- 기존에 정의된 클래스에 메소드와 변수를 추가하여 새로운 클래스를 정의하는 것
상속은 다음과 같이 표현된다.
A 라는 클래스를 B 라는 클래스가 상속 받는다고 하면
class B extends A{}
이렇게 상속을 하게되면 A 에서 선언된 변수와 메소드를 B 에서 별다른 선언 없이 사용할 수 있다.
이때 A 를 상위 클래스, 기초 클래스, 부모 클래스 라고 부르며(superclass (parent)) ,
B 를 하위 클래스, 유도 클래스, 자식 클래스 라고 부른다(subclass (child)).
인스턴스 변수의 초기화를 위한 생성자가 상속시에 어떻게 적용될지 살펴본다.
위의 코드와 같이 코드를 구성하여 다음을 알 수 있다.
- 하위 클래스를 호출 하였을 시에 상위 클래스의 생성자와 하위 클래스 생성자가 모두 호출된다.
- 상위클래스의 생성자가 먼저 호출되고 하위 클래스의 생성자가 나중에 호출된다.
상위 클래스를 명시적으로 호출하는 방법도 있다.
바로 super 라는 키워드를 사용하면 된다.
위 코드와 같이 line 21 에 super(); 를 삽입하였고 이 키워드가 상위 클래스의 생성자를 호출하는 역할을 한다.
보통 이 키워드를 적지 않으면 컴파일러에서 자동으로 해당 키워드를 삽입하여 호출한다.
또한 자바는 프로그램이 과도하게 복잡해지는 것을 막기 위해 단일 상속만을 지원한다.
하나의 클래스에 하나의 클래스만 상속 가능하다는 뜻이다.
하지만 상속의 depth 를 더하는 것은 가능하다.
Class A{}
Class B extends A{}
Class C extends B{}
...
과 같이 구성 할 수 있다.
static 선언이 붙은 클래스 변수와 클래스 메소드는
- 인스턴스의 생성과 상관없이 접근 가능
- 클래스 내부와 외부에서 접근 수준 지시자가 허용하면 접근 가능
- 클래스 변수와 클래스 메소드가 위치한 클래스 내에서는 직접 접근 가능
하다는 특성이 있기 때문에 인스턴스에 속하지 않고 딱 하나만 존재한다.
따라서 상속의 대상이 아니다.