상속
- 부모클래스가 가지는 멤버를 자식클래스가 물려받아 자신의 멤버인 것처럼 사용할 수 있도록 만든 기술
- 멤버 외에 타입도 상속이 된다.
- 자바는 단일상속만 지원한다. (하나의 클래스만을 부모클래스로 가짐)
- 클래스 간의 상속 시에는 extends 키워드를 사용한다.
ex) public class Academy extends Company{ } //Company가 부모 클래스
장점
- 새로운 클래스를 작성 시 기존에 작성된 클래스의 재사용 가능
- 클래스간 계층 관계가 형성되어 다형성 문법의 토대가 된다.
단점
- 부모클래스의 기능 변경시 자식클래스의 정상적인 동작 유무 예측이 힘들다.
- 자식클래스가 물려받아 사용하는 기능들을 부모클래스에서 변경 시 어려움이 따름
- 부모클래스로부터 물려받은 기능이 자식클래스에서는 무의미 할 수 있다.
- 장단점을 고려해볼 때 IS-A 관계로 구분되는 경우에만 사용해야 한다.
IS-A
- "자식클래스는 (하나의) 부모 클래스이다." 의 관계로 부모클래스의 멤버들을 자식클래스가 상속받는다.
- Circle is a Shape. => Circle 클래스는 하나의 Shape 클래스이다.
super
- 부모클래스의 인스턴스 주소를 보관하는 레퍼런스 변수
- 자식클래스 내의 모든 생성자와 메소드 내에서 부모클래스의 레퍼런스 변수를 사용할 수 있음
super()
- 부모생성자를 호출하는 구문으로 매개변수 타입, 개수, 순서가 일치하는 부모의 생성자를 호출한다.
- this()는 해당 클래스의 생성자를 호출하는 구문이다.
- super()는 부모클래스가 가지는 private 생성자를 제외한 나머지 생성자를 호출하는 구문이다.
오버라이딩 (Overriding)
- 부모클래스에서 상속받은 메소드를 자식클래스가 재정의하여 사용하는 것 (annotation 의 종류)
- 성립조건 : 메소드 이름 동일
메소드 리턴 타입 동일
매개변수의 타입, 개수, 순서가 동일
private 메소드는 오버라이딩 불가능
final 키워드가 사용된 메소드는 오버라이딩 불가능
접근제한자는 부모 메소드와 같거나 더 넓은 범위여야 함
오버라이딩(Overriding) | 오버로딩(Overloading) |
하위 클래스에서 메소드 정의 | 같은 클래스에서 메소드 정의 |
메소드 이름 동일 매개변수 동일(갯수, 타입, 순서) 리턴 타입 동일 |
메소드 이름 동일 매개변수 다름(갯수, 타입, 순서) 리턴 타입 상관 없음 |
자식 메소드의 접근 범위가 부모 메소드의 접근 범위보다 넓거나 같아야 함 |
접근제어자와 상관 없음 |
자식 메소드의 예외처리 수가 부모 메소드의 예외처리 수보다 적거나 범위가 좁아야 함 |
예외처리와 상관 없음 |
'TIL > Java' 카테고리의 다른 글
[Java] 객체지향 - 2. 다형성과 객체배열, 매개변수에 쓰이는 다형성, 리턴타입에 쓰이는 다형성, 추상클래스, 추상메소드 (0) | 2022.01.13 |
---|---|
[Java] 객체지향 - 1. 다형성, 동적바인딩, instanceof 연산자, 클래스 형변환 (0) | 2022.01.13 |
[Java] 객체배열 (0) | 2022.01.13 |
[Java] 클래스와 객체, 객체지향언어, 캡슐화, 추상화, 생성자, 오버로딩 (0) | 2021.12.31 |
[Java] 배열(2차원 배열, 배열 복사, 배열 정렬, 오름차순 정렬) (0) | 2021.12.28 |