Inheritance(상속)

방혁·2024년 1월 21일

Java

목록 보기
3/4

상속

  • 기존(상위)클래스의 자산(멤버)을 자식(하위)클래스에서 재사용하기 위한 것
  • 상위 클래스의 멤버를 물려받기 떄문에 코드 절감
  • 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 : 같은 클래스

profile
반갑습니다 👋

0개의 댓글