상속

  • 상위 클래스는 하위 클래스보다 일반적인 의미를 가짐
  • 하위 클래스는 상위 클래스보다 구체적인 의미를 가짐

클래스 상속 문법

class B extends A {
}
  • extends 뒤에는 단 하나의 클래스만 사용할 수 있음
  • 자바는 single inheritance 만을 지원함

Protected 접근제어자

  • 상속 관계에 있을 때, 다른 패키지에 있더라도 Protected 접근 제어자를 이용하여 접근 가능하다.
  • private > default (같은 패키지 일때만) > protected > public 순


상속에서 클래스 생성 과정

  • 하위 클래스가 생성 될 때 상위 클래스가 먼저 생성됨
  • 상위 클래스의 생성자가 호출되고 하위 클래스의 생성자가 호출됨
  • 하위 클래스 생성자에서는 무조건 상위 클래스의 생성자가 호출 되어야 함
  • 아무것도 없는 경우 컴파일러는 상위 클래스 기본 생성자를 호출하기 위한 super()를 코드에 넣어줌
  • super() 호출되는 생성자는 상위클래스의 기본 생성자
  • 만약 상위 클래스의 기본 생성자가 없는경우 (매개변수가 있는 생성자만 존재하는 경우 ) 하위 클래스는 명식적으로 상위 클래스를 호출해야 함

상속에서의 메모리 상태

  • 상위 클래스의 인스턴스가 먼저 생성이 되고, 하위 클래스의 인스턴스가 생성 됨

super 예약어

  • 하위 클래스가 상위 클래스에 대한 주소를 가짐
  • 하위 클래스가 상위 클래스에 접근할 때 사용 가능

상위 클래스로의 묵시적 형 변환 (업캐스팅)

  • 상위클래스 형으로 변수를 선언하고 하위 클래스 인스턴스를 생성할 수 있음
  • 하위 클래스는 상위 클래스의 타입을 내포하고 있으므로 상위 클래스로의 묵시적 형변환이 가능하다.

형 변환에서의 메모리

  • Customer vc = new VIPCustomer();에서 vc가 가리키는 것은 무엇일까?
  • VIPCustomer() 생성자의 호출로 인스턴스는 모두 생성되었지만
  • 타입이 Customer 이므로 접근한 수 있는 변수나 메서드는 Customer의 변수와 메서드 이다.


메서드 오버라이딩

  • 상위 클래스에 정의 된 메서드 중 하위 클래스의 기능이 맞지 않거나 추가 기능이 필요한 경우 같은 이름과 매개변수로 하위 클래스에서 재정의함

가상 메서드 (virtual method)

  • 프로그램에서 어떤 객체의 변수나 메스드의 참조는 그 타입에 따라 이루어진다.
  • 가상 메서드의 경우 타입과 상관없이 실제 생성된 인스턴스의 메서드가 호출되는 원리
  • Customer vc = new VIPCustomer(); , vc.calcPrice(10000); 의 경우 VIPCustomer 클래스의 calcPrice 메서드 호출

다형성 (polymophism)

  • 하나의 코드가 여러가지 자료형으로 구현되어 실행되는 것
  • 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나
  • 객체지향 프로그래밍의 유연성, 재활용성, 유지보수성에 기본이 되는 특징

상속은 언제 사용할까?

IS-A 관계 (is a relationship : inheritance)

  • 일반적인 (general) 개념과 구체적인 (specific) 개념과의 관계
  • 상위 클래스 : 일반적인 개념 클래스 ( 포유류 )
  • 하위 클래스 : 구체적인 개념 클래스 ( 사람, 원숭이, 고래.. )
  • 단순히 코드를 재사용하는 목적으로 사용하지 않음

HAS-A 관계 (composition)

  • 한 클래스가 다른 클래스를 소유한 관계
  • 코드 재사용의 한 벙법
  • Student 가 Subject를 포함한 관계
class Student {
   Subject majorSubject;
}

다운 캐스팅 - instanceof

  • 하위 클래스가 상위 클래스로 형 변환 되는 것은 묵시적으로 이루어짐
  • 다시 원래 자료형인 하위 클래스로 형 변환 하려면 명시적으로 다운캐스팅을 해야 함
  • 이 때 원래 인스턴스의 타입을 체크하는 예약어가 instanceof 임

'Back-end > java' 카테고리의 다른 글

기본 클래스  (0) 2021.06.22
인터페이스  (0) 2021.06.22
추상클래스  (0) 2021.06.22
배열과 ArrayList  (0) 2021.06.21
클래스와 객체  (0) 2021.06.21

+ Recent posts