상속은 검증된 소프트웨어를 재사용할 수 있어서 신뢰성 있는 소프트웨어를 손쉽게 개발, 유지 보수할 수 있게 해주는 중요한 기술이다. 상속을 이용하면 여러 클래스에 공통적인 코드들을 하나의 클래스로 모을 수 있어서 코드의 중복을 줄일 수 있다.
상속의 형식
자바에서는 extends 키워드를 이용하여 상속을 나타낸다. 상속하는 클래스를 부모클래스(수퍼 클래스)라고 하고 상속받는 클래스를 자식클래스(서브 클래스)라고 한다.
ex) class Cat extends Animal{
. ^ ^
. 자식클래스 부모클래스
}
무엇이 상속되는가?
자식 클래스는 부모 클래스가 가지고 있는 모든 멤버들을 전부 상속받고 자신이 필요한 멤버를 추가하기 때문에 항상 자식 클래스가 부모 클래스를 포함되게 된다. 상속을 나타낼 때 extends(확장)라는 용어를 사용하는 이유도 상속을 하게되면 멤버가 증가하기 때문이다.
왜 상속이 필요한가?
1. 우리는 직접 작성할 필요 없이 이미 존재하는 클래스의 필드와 메소드를 재사용할 수 있다.
2. 상속을 사용하면 중복되는 코드를 줄일 수 있다.
예시)
이미지에서도 알 수 있듯이 자식클래스를 메인메소드밑에 생성하면
자식클래스에서 만든 메소드와 부모클래스에서 만든 메소드를 둘다 불러 올 수 있다.
1. 왜 Dog객체를 생성했는데 Animal 생성자까지 호출되는 것일까?
자식 클래스 객체안에는 부모 클래스에서 상속된 부분이 들어 있다. 따라서 자식 클래스 안의 부모 클래스 부분을 초기화 하기 위하여 부모 클래스의 생성자도 호출되는 것이다.
2. 생성자의 호출순서는 (부모클래스의 생성자) -> (자식 클래스의 생성자) 순으로 된다.
자식 클래스 객체는 부모 클래스에서 상속된 부분을 초기화 하기 위하여 먼저 부모클래스의 생성자를 호출한다. 부모클래스의 생성자 호출이 끝나면 자식 클래스가 추가한 부분을 초기화 하기 위하여 자식 클래스의 생성자가 실행된다.
명시적인 호출(super을 이용) VS 묵시적인 호출(super을 이용 안함) - 생성자
만약 생성자에 매개변수가 있다면 (만약 매개변수 int a 가 있다면)
super(a);
메소드를 호출하는 방법
super.메소드 이름()
만약 부모클래스에 default생성자를 만들지 않고 자식클래스에서 생성자를 만들려고 할때 부모클래스안에 있는 생성자의 매개변수를 사용하지 않으면 오류가 난다.
'java' 카테고리의 다른 글
자바 패키지란? (0) | 2019.04.22 |
---|---|
자바 오버라이딩 (0) | 2019.04.11 |
자바 내장 클래스 (0) | 2019.04.11 |
자바 인수 전달 방법 (0) | 2019.04.11 |
(자바) 관계연산자 VS 논리연산자 (0) | 2019.04.08 |