상속(Inheritance)

Java 상속, 형변환, 재정의

상속

  • 구현되어 있는 기능, 속성을 확장하여 재사용하는 것
  • class B extends A{ }
  • extends 뒤에는 하나의 클래스만 올 수 있다.
  • 자바는 안정성을 위해 단일 상속만을 지원한다.
  • 상속 하는 클래스 : 상위 클래스, parent class, child class
  • 상속 받는 클래스 : 하위, child, sub

상속을 사용하는 경우

  • 객체 지향 프로그래밍에서는 크게 2가지 방법을 사용할 수 있다.
  • IS-A 관계 (is a relationship : inheritance), HAS-A관계(composition)
  • IS-A관계에서 상속을 사용한다.
  1. IS-A 관계
  • 예시 : 포유류 - 인간, 호랑이, 사자 등
  • 일반적인 개념과 구체적인 개념의 관계
  • 뼈대를 구축하고 이를 확장해서 사용할 때 자주 사용된다.
  • 상속은 클래스간의 결합도가 높은 설계이다.
  • 계층구조가 복잡하거나 hiearchy가 높으면 좋지 않다.
  1. HAS-A 관계
  • 예시 : Java의 ArrayList 클래스를 사용하는 경우
  • 클래스가 다른 클래스를 포함하는 관계 (변수로 선언)
  • 코드 재사용의 가장 일반적인 방법

상속을 구현하는 경우

  • 일반적인 클래스로부터 보다 구체적인 클래스를 생성하고 싶을 때 사용한다.
  • 직업 (일반 클래스) - 개발자 (구체적인 클래스)

하위 클래스가 생성되는 과정

  • extends로 하위클래스를 생성하면 상위 클래스가 먼저 생성된다.
  • 하위 클래스의 생성자가 상위 클래스의 생성자를 호출하게 된다.
  • 컴파일러가 하위 클래스의 생성자 내에 super()를 자동으로 입력하여 default 생성자를 호출한다.

    생성자에 매개 변수가 존재할 경우, super(매개변수)를 이용하여 명시적으로 호출해주어야 한다.

형변환

  • 상위 클래스로 변수를 생성하고 하위 클래스의 생성자로 인스턴스를 생성

  • 상위 클래스 타입의 변수에 하위 클래스의 변수가 대입 (업 캐스팅)

  • 메서드의 인자에 하위 클래스 타입을 넣어도 상위 클래스 타입으로 형변환이 가능하다.

  • 하위 클래스는 상위 클래스의 타입을 내포하고 있으므로 묵시적 형변환이 가능하다.

    1
    2
    3
    4
    5
    class B extends A {}
    A instanceA = new B();
    method(instanceB);

    type method(A instanceA){}
  • 하위 클래스로 생성이 되었지만 type이 상위 클래스의 type이므로 하위 클래스에서 생성한 method 등에는 접근할 수 없다.

재정의 (Overriding)

  • 상위 클래스에서 정의한 method를 하위 클래스에서 재정의하고 싶을 때 사용
  • 메서드 정의 부분 (Function Signiture)은 동일하게 입력해야한다.
  • 다르게 입력할 시 새로운 method를 정의하는 것처럼 해석된다.
  • 사용법

    @Override 를 Annotation으로 입력해준다.

    Annotation (주석)

  • 컴파일러에게 특별한 정보를 제공해주는 역할을 한다.
  • Override
  • 재정의된 메서드라는 정보 제공
  • FuctionalInterface
  • 함수형 인터페이스라는 정보 제공
  • Deprecated
  • 이후 버전에서 사용되지 않을 수 있는 변수
  • 메서드에서 사용된다.
  • SuppressWarnings(“~”)
  • 특정 경고가 나타나지 않도록함
Author

Inwoo Jeong

Posted on

2021-08-12

Updated on

2021-09-09

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.

댓글