상세 컨텐츠

본문 제목

JAVA 8. 상속과 다형성

Backend/JAVA-자바

by 사랑짱 2021. 6. 12. 01:43

본문

 

◆ 상속이란?

* 현실 세계에서의 의미

- 부모가 자식에게 물려주는 행위

- 부모가 자식을 선책하여 물려줌

 

* 객체지향 프로그램에서의 의미 

- 자식 클래스(하위, 파생)가 부모 클래스(상위)의 멤버를 물려 받는 것

- 자식이 부모를 선택하여 물려받음

- 상속 대상 : 부모의 인스턴스 필드와 인스턴스 메소드

 (정적멤버는 클래스 소속이기 때문에 상속의 개념에 소속되지 않음!)

 

※ extends : 자식클래스가 상속할 부모클래스를 지정하는 키워드

 

 

 

◆ 상속의 특징

- 상속의 대상 : 부모클래스의 인스턴스 멤버(static은 클래스 객체 소속이므로 상속 X)

- 자바는 하나의 부모클래스만 상속 가능(단일상속)

- 부모클래스의 private 접근 갖는 필드와 메소드 제외

 

 

◆ 상속의 효과

- 같은 종류의 객체들의 규격을 명시하는 효과

- 부모클래스를 재 사용하여 시간 절약

- 반복된 코드 중복 제거

- 유지보수 편리성

 

 

◆ 부모 생성자 호출 super(...)

- 생성자 내 첫줄에 super( ) 키워드를 통해 부모 생성자가 호출/생성

- 자식 객체를 생성할 때는 부모 객체부터 생성 후 자식 객체가 생성

- 컴파일러가 자동적으로 super()키워드는 넣지만 명시적으로 넣어주는 것이 안정성이 있다.

  (특히, 매개변수가 있는 부모 생성자를 사용하는 경우 super키워드로 값을 명시적으로 작성해야한다!)

 

 

메소드 재정의(Override)

- 부모 클래스에서 상속받은 메소드를 수정하여 자식 클래스에서 재정의하는 것

- 재정의된 자식클래스의 메소드가 실행됨으로써 부모 메소드는 숨겨지는 효과 발생

- @Override 어노테이션 사용을 통해 컴파일러 검사를 실시

 

※ Override의 조건

- 부모클래스의 메소드와 동일한 시그니처를 가져야 한다.

- 접근제한을 더 강하게 변경할 수 없다.

- 새로운 예외처리는 불가하다.

 

 

◆ 부모 메소드 사용 super(...)

- 자식클래스에서 수정되기 이전의 부모 메소드 호출하려면 super( ) 사용

  super.부모메소드( )  :  여기서 super( )의 의미는 부모 객체를 참조한다는 의미

 

 

  final 클래스와 final 메소드

- final 필드 : 수정 불가 필드

- final 클래스 : 상속 불가한 클래스

- final 메소드 : 자식이 재정의할 수 없는 메소드

 

final 키워드가 붙으면 마지막이라는 뜻!!!

 


 

  상속과 다형성

- 다형성이란? 같은 타입이지만 실행 결과가 다양한 객체 대입 가능한 성질을 의미 

- 상속에서의 다형성 : 타입변환을 통해 / Override를 통해  가능 ★★★★★

   결과적으로 OOP에서의 다형성 구현을 위해서는 상속이 전제되어야 한다!!!

 

 

1. 자동타입변환(Promotion) 

 

- 프로그램 실행 도중에 자동 타입 변환이 일어나는 것 => Promotion

- 부모타입변수에 자식객체를 대입하면 자동타입 변환(Promotion)이 발생

  (타입 간 상속 계층의 상위면 자동타입 변환도 가능)

 

 

※ 이때, 부모클래스 안에 자식타입이 포함되어 숨기 때문에

   겉으로 보이는 부모클래스에 선언된 필드와 메소드만 사용가능하다!

   (예외 : 자식타입에서 재정의된 메소드는 호출 가능하다!!)

            

 

2.  강제타입변환(Casting) 

 

 

- 큰 타입을 작은 타입으로 강제로 변환하는 것 => Casting

- 조건 : 자식타입이 부모 타입으로 자동 변환되어 있는 경우!!!

- 용도 : 부모타입에 선언된 필드와 메소드만 필요할 때

           자식 타입에 선언된 필드와 메소드가 필요할 때

 

다시 말해, 부모타입으로 형변환되어있는 자식 타입으로 다시 강제 형변환하는 것!

 

※ 객체타입 확인 (instanceof)

- 강제 타입 변환 하기 전, 해당 자식 타입이 맞는지 확인하기 위해서 사용

 

 

관련글 더보기