상속
- 기존(상위)클래스의 자산(멤버)을 자식(하위)클래스에서 재사용하기 위한 것
- 상위 클래스의 멤버를 물려받기 떄문에 코드 절감
- extends 키워드 사용 (확장할 수 있다는 것이 중요)
모든 클래스의 조상 클래스는 Object클래스임
- 별도의 extends 선언이 없는 클래스는 extends Object가 생략
상속관계는 is a 관게라고 한다.
단일 상속
- 다중 상속의 경우 관계가 복잡해진다.
- 상위 클래스에서 메서드 이름이 같다면 무엇을 쓸지 정할 수 없음
- 따라서 자바에서는 단일 상속만 지원
but, interface와 포함 관계 사용
포함 관계
- has a 관계
- 2개 이상의 클래스에서 특성을 가져올 때 하나는 상속, 나머지는 멤버변수로 처리
메서드 재정의
메서드 오버라이딩
- 조상 클래스에 정의된 메서드를 자식 클래스에서 적합하게 수정하는 것
- 물려받은 메서드의 기능을 자식 클래스에서 수정하는 것
조건
- 메서드 이름이 같아야한다.
- 매개변수의 개수, 타입, 순서가 같아야한다.
- 리턴타입이 같아야한다.
- 접근 제한자는 부모보다 범위가 넓거나 같아야한다.
- 조상보다 더 큰 예외를 던질 수 없다.
super 키워드
- super.을 이용해 조상의 메서드 호출로 조상의 코드 재사용
- super()는 조상 클래스의 생성자 호출
- super()는 자식 클래스 생성자의 맨 첫 줄에서만 호출 가능
- 명시적으로 this() 또는 super()를 호출하지 않는 경우 컴파일러가 super()삽입
Annotation
- 주석
- 컴파일러, JVM, 프레임워크등이 보는 주석
- 소스코드에 메타 데이터를 삽입하는 형태
- ex) @Deprecated, @Override, @SuppressWarnings
Package & Import
Package
- 물리적으로 패키지는 클래스 파일을 담고 있는 디렉터리
- 상단에 선언. 하나만
- 생략시 기본패키지 but, 권장하지 않음
일반적인 package naming룰
import
- 패키지와 달리 여러번 선언 가능
- ctrl + space
- ctrl + shift + o
제한자(modifier)
- 하나의 대상에 여러 제한자를 조합 가능하나 접근 제한자는 하나만 사용 가능
- 순서 무관
-일반적으로 접근 제한자를 맨 앞으로
종류
- 접근 제한자 : public, protected, default, private
- 그 외 제한자 : static, final, abstract, ...
final
- 마지막, 더 이상 바뀔 수 없음
- 실수하지않게 도와주는 역할
- final class : 더 이상 확장 할 수 없음 : 상속금지 -> 오버라이드 방지
-ex) Math, String, ...
- final method : 더 이상 재 정의 할 수 없음 ; 오버라이드 금지
- final variable : 더 이상 값을 바꿀 수 없음 (상수)
- Blank final : 값이 할당되지 않은 멤버 변수
- 생성자에서 1회 초기화 가능
- static final
public : 클래스, 생성자, 멤버
protected : 생성자, 멤버
package(default) : 클래스, 생성자, 멤버
private : 생성자, 멤버
public : 같은 클래스, 같은 패키지, 다른 패키지의 자손클래스, 전체
protected : 같은 클래스, 같은 패키지, 다른 패키지의 자손클래스
package(default) : 같은 클래스, 같은 패키지
private : 같은 클래스