반응형

상속의 개념과 사례

상속

  • 하위 클래스는 상위 클래스의 특징인 필드와 메소드를 그대로 물려받을 수 있는 특성
  • 사람, 교직원, 학생, 교수, 행정직원, 장학생을 클래스로 표현
  • 이들 클래스 간의 계층 구조에서 상속이라는 특징을 파악
  • 하위의 교수, 행정직원은 상위 교징원의 특성을 모두 물려받을 수 있음

 

[A]는 [B]이다 →이다 관계(is-a relationship)가 성립

  • [B]는 상위 클래스, [A]는 하위 클래스 관계
  • 하위 클래스는 상위 클래스의 필드와 메소드를 상속받을 수 있는 특징

 

상속 예시

  • 교직원은 사람이다.
  • 사람에 정의된 필드와 메소드는 모두 교직원이 상속받을 수 있음
  • 자동차는 차량이다.
  • 차량에 정의된 필드와 메소드는 자동차에서 상속받을 수 있음

 

사람.java 상위클래스 예시

 

 

교직원.java 하위클래스 예시

 

 

상속테스트.java 부모클래스의 이름을 상속 예시

 

 

상속테스트.java 출력결과

 

상위 클래스

  • 부모 클래스(parent class)
  • 슈퍼 클래스(super class)
  • 기본 클래스(base calss)

 

하위 클래스

  • 자식 클래스(child class)
  • 서브 클래스(sub class)
  • 유도 클래스(derived class)
  • 파생 클래스(derived class)

 

 

extends 키워드

  • 하위 클래스이름 extends 상위 클래스 이름
  • 모든 클래스의 최상위는 Object 클래스

 

차량.java 상위클래스

 

 

자전거.java 하위글래스

 

 

자동차.java 하위클래스

 

 

기차.java 하위클래스

 

 

상워 클래스의 필드와 메소드를 상속

  • 하위클래스
  • 상위클래스의 멤버인 필드와 메소드를 구현 없이 사용

 

this와 super

  • this는 객체 자신을 의미하는 키워드
  • super는 상위 객체를 의미하는 키워드

 

차량.java

 

 

자동차.java

 

 

자동차테스트.java

 

 

자동차테스트.java 실행 결과

 

 

상위 생성자 호출

기본 생성자 구현 첫 줄에서의 super()

  • super()는 상위 클래스의 기본 생성자를 호출하는 문장
  • 생성자의 첫 줄에서 상위 생성자를 호출하는 super() 또는 super(...)를 명시적으로 호출하지 않는다면,
  • 첫 줄에서 무조건 자동으로 super()를 호출
  • 자동으로 사용되는 기본 생성자의 첫 줄은 무조건 super()를 호출

 

컴파일 시 자동 구현 예시 (1)

 

 

컴파일 시 자동 구현 예시 (2)

 

 

컴파일 순서 확인 예시 (1)

 

 

컴파일 순서 확인 예시 (2)

 

 

컴파일 순서 실행 결과

 

 

객체 생성 순서

  • 생성자 호출에 의해 객체가 생성될 때 항상 상위 객체를 위한 필드와 메소드가 먼저 생성된 후 하위 객체가 생성
  • 자동차의 생성자 호출되는 첫 줄에 super() 호출에 의해서
  • 차량 객체의 필드가 생성된 이후에 자동차 필드가 생성 및 초기화

 

 

상위 클래스에서 기본 생성자 구현

  • 사용자가 직접 구현하는 생성자 첫 줄
  • 상위 생성자의 호출인 super() 또는 super(인자)가 아니면
  • 자동으로 기본 생성자 super() 호출
  • 이 때 상위 클래스에서 기본 생성자를 사용할 수 없다면 문법 오류 발생

 

상위 클래스 생성자 예시

 

 

하위 클래스 생성자 예시

 

 

매개변수를 가지는 클래스 생성 예시

 

 

출력 결과

 

 

클래스 접근 지정자

클래스 접근 지정자는 public과 [default] 방식

  • 키워드 public을 사용한 클래스는 다른 모든 클래스에 사용 가능
  • 접근 지정자를 아무것도 기술하지 않은 default 클래스는 동일한 패키지의 다른 클래스에서만 사용 가능
  • default 클래스는 package 클래스라고 부름

 

 

필드와 메소드 접근 지정자

  • public - 모두 접근 가능 (다른 패키지인 경우 import 필요)
  • protected - 상속을 통해서만 접근 가능
  • default - 동일한 패키지에서만 접근 가능
  • private - 접근 불가

 

접근 지정자 예시 (1) 계좌

 

접근 지정자 예시 (2) 상속받은 클래스

 

 

접근 지정자 예시 (3)-1 동일 패키지

 

 

접근 지정자 예시 (3)-2 동일 패키지

 

 

접근 지정자 예시 (4) 다른 패키지의 클래스를 상속받은 경우

 

 

접근 지정자 예시 (5)-1 다른 패키지이고 상속받지도 않은 경우

 

 

접근 지정자 예시 (5)-2 다른 패키지이고 상속받지도 않은 경우

 

 

반응형

+ Recent posts