상속
부모 클래스의 멤버를 자식 클래스에게 물려주는 것
class 자식클래스 extends 부모클래스 { ... }
조상 클래스 : 상속 해주는 클래스 (부모 클래스, 상위 클래스, 기반 클래스)
자손 클래스 : 상속 받는 클래스 (자식 클래스, 하위 클래스, 파생된 클래스)
상속의 장점
1. 코드의 중복을 줄여줌
2. 개발 시간 줄여줌
3. 수정을 최소화 -> 유지 보수 시간 최소화
상속의 특징
1. 생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다.
2. 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다.
3. 자손 클래스의 인스턴스를 생성하면 조상 클래스의 멤버와 자손 클래스의 멤버가 합쳐진 하나의 인스턴스로 생성된다.
4. 부모 클래스에서 private 접근 제한을 갖는 필드와 메소드는 상속 대상에서 제외된다.
5. 다중 상속은 불가능하다.
* 클래스간의 관계 결정하기
포함 관계 : 한 클래스의 멤버 변수로 다른 클래스 타입의 참조변수를 선언하는 것.
클래스를 작성하는데 있어서 상속관계를 맺어 줄 것인지 포함관계를 맺어 줄 것인지 결정하는 것은 혼돈스러운 일이다.
이 때, ~은 ~이다와 ~은 ~을 가지고 있다를 넣어서 문장을 만들어 보면 관계를 쉽게 결정할 수 있다.
원은 점이다.
원은 점을 가지고 있다.
원은 점을 가지고 있다가 더 자연스러우므로 포함관계로 맺어 주는것이 맞다.
또 다른 예로,
스포츠카는 차이다.
스포츠카는 차를 가지고 있다.
스포츠카는 차이다가 더 자연스러우므로 이 경우는 상속관계로 맺어 주면 된다.
Object 클래스
object 클래스는 모든 클래스 상속계층도의 최상위에 있는 조상클래스이다.
다른 클래스로부터 상속 받지 않는 모든 클래스들은 자동적으로 Object클래스로부터 상속받게 되어있다.
오버라이딩
조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것을 오버라이딩이라고 한다. 상속받은 메서드를 그대로 사용하기도 하지만, 자손 클래스 자신에 맞게 변경해야하는 경우가 많다. 이럴 때 조상의 메서드를 오버라이딩한다.
오버라이딩의 조건
자손 클래스에서 오버라이딩하는 메서드는 조상 클래스의 메서드와
1. 이름이 같아야 한다.
2. 매개 변수가 같아야 한다.
3. 반환 타입이 같아야 한다.
단, 접근 제어자와 예외는 제한된 조건 하에서만 다르게 변경할 수 있다.
1. 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
2. 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
3. 인스턴스메서드를 static메서드로 또는 그 반대로 변경할 수 없다.
오버로딩 vs 오버라이딩
오버로딩 : 기존에 없는 새로운 메서드를 정의하는 것(new)
오버라이딩 : 상속받은 메서드의 내용을 변경하는 것(change, modify)
Super
super - 부모 메서드를 호출하는 역할
- 자식 클래스에서 부모 클래스의 메소드를 오버라이드 하면, 부모 클래스의 메소드는 숨겨지고 오버라이딩된 자식 메소드만 사용하게 된다.
- 그런데, 오버라이딩 된 부모 클래스의 메소드를 호출해야 하는 경우가 생긴다.
- 이 때, super 키워드를 붙혀 부모 메소드 호출 가능
super() - 부모의 생성자를 호출하는 역할
반드시 자식 생성자의 첫줄에 위치해야 함.
자바에서 자식 객체 생성 시, 부모 객체가 먼저 생성되고 자식 개체가 생성됨
모든 객체는 클래스의 생성자를 호출해야 생성됨
부모 객체를 생성하기 위한 부모 생성자는 자식 생성자의 첫 줄에서 생성된다.
'자바' 카테고리의 다른 글
3. 클래스 (0) | 2021.03.17 |
---|---|
2. 데이터 타입, 변수 (0) | 2021.03.11 |