JAVA

[Java] Inheritance (상속)

SangRok Jung 2022. 6. 8. 15:23
반응형

Inheritance


코드의 재활용성을 높이고 공통적 규약을 제공하기 위한 객체지향 특성 (상속성)

부모 클래스를 확장, 자식클래스를 만드는 기법

is-a, is kind of 관계

 

 

* has-a 관계는 이론적으로 Inheritance로 볼 수 있으나 Inheritance로 구현하지 않는다.

  • car is a tire는 이론적으로 맞으나 car has a tire 관계로 구현한다.

 

 

 

 

 

 

 

 

 

 

 

Inheritance의 기본적인 문법

Inheritance에는 단일상속과 다중상속이 있으나 Java에서는 단일상속만 지원. (C++은 둘다 지원)

 

 

 

 

 

 

 

 

 

 

Inheritance의 메모리 구조

 

 

 

 

 

 

 

 

 

 

 

 

Constructor의 호출 순서

  • 부모클래스의 생성자가 먼저 호출 된 것 처럼 보이지만 Dog생성자가 먼저 호출.
  • Dog()이 먼저 호출되나 상위 클래스가 있기 때문에 즉시 Animal()로 점프.

 

 

 

 

 

 

 

 

 

super()

하위 Class의 Constructor에서 상위 Class의 Constructor를 명시적으로 호출할 때 사용하는 keyword.

기본 생성자가 아닌 Constructor Overloading에서 사용한다.

super() 위의 어떠한 code도 존재할 수 없음 (Compile Error)

 

 

 

 

 

 

 

 

 

 

Static in Inheritance

Inheritanceheap Memory에서 이루어지기 때문에 static methodstatic variableInheritance대상이 아니다.

하위 클래스를 통해 접근은 가능하다.

 

 

 

 

 

 

 

 

 

Access control

protected

  • Same Package : Public 처럼 동작.
  • Other Package : Private 처럼 동작.
  • Package가 다른 경우 private처럼 동작시키기 위한 접근 제어 지시자.

 

 

 

 

 

 

 

Instanceof

해당 인스턴스가 어떤 클래스의 Instance인지 확인하는 operator.

상위 클래스로 instanceof를 해도 확인 가능.

 

 

 

 

 

 

 

 

 

Overriding

부모 Class의 method를 자식 class에서 재정의하여 사용하는 기법.

부모 Class의 method가 가지고 있는 기존의 기능에 추가할 때 활용.

method만 가능하며 Variable은 불가능함.

return type, function name, parameter를 동일하게 구현함

 

 

 

 

 

 

 

 

 

 

LSP (Liskov Substitution Principle)

자료형 S가 자료형 T의 하위형이라면 필요한 프로그램의 속성의 변경 없이 자료형 T의 객체를 자료형 S의 객체로 교체 할 수 있어야 한다는 원칙.

부모Class의 설계원칙을 자식Class도 따라야 하며 그것은 Overriding시에도 준수 되어야 함

 

반응형

'JAVA' 카테고리의 다른 글

[Java] Polymorphism of Parameters (매개변수의 다형성)  (2) 2022.06.14
[Java] Interface  (0) 2022.06.09
[Java] 숫자 검사하기.  (0) 2022.06.07
[Java] Console I/O  (0) 2022.06.07
[Java] printf() 출력  (0) 2022.06.05