Java

[Java, 객체지향] 클래스 상속(inheritance)이란?

15호의 개발자 2021. 8. 11. 11:39
반응형

 

[Java, 객체지향] 클래스 상속 (inheritance)이란?

 

 

 

클래스에서 상속의 의미

새로운 클래스를 정의할 때 이미 구현된 클래스를 상속(inheritance)받아서

속성이나 기능이 확장되는 클래스를 구현하는 것

 

 

 

상속하는 클래스

  • 상위클래스, parent class, base clasee, super class
  • 하위 클래스보다 일반적인 개념과 기능을 가짐

 

상속 받는 클래스

  • 하위 클래스, child class, derived class, subclass
  • 상위 클래스보다 구체적인 개념와 기능을 가짐

 

 

하위 클래스는 상위 클래스의 모든 멤버를 상속받으므로,

하위 클래스의 멤버 개수는 상위 클래스의 멤버 개수보다 항상 같거나 많다.

 

또한, 상위 클래스의 변경은 하위 클래스에 영향을 미치지만

하위 클래스의 변경은 상위 클래스에 영향을 미치지 않는다.

 

 

 

class B extends A {

}

 

A class: 상위 클래스, 상속하는 클래스

B class: 하위 클래스, 상속 받는 클래스

 

(*상속 받는 클래스쪽으로 화살표를 향해야할 것 같지만,

상속하는 쪽으로 화살표 방향이 향한다는 것 주의한다.)

(*화살표는 속이 빈 화살표, 실선 화살표이다)

 

 

 

 

 

단일 상속 vs 다중 상속 (Single Inheritance vs Multiple Inheritance)

Java에서는 single inheritance만 가능하다

C++에서 가능한 다중 inheritance는 Java에서는 불가능하다.

 

다중 상속 ex)

class classA extends classB, classC    // 자바에서는 Error

 

다중 상속은 충돌과 같은 문제가 발생할 수 있으므로 Java에서는 지원되지 않는다.

하지만 다중 상속의 장점도 분명 있는 만큼, 다중 상속의 효과를 낼 수 있는 도구들이 있다.

인터페이스 또는 포함관계 등 Java에서는 다중 상속의 대안을 갖고 있다.

 

 

 

Object 클래스

Object 클래스는 모든 클래스의 최상위 parent class라고 볼 수 있다.모든 클래스는 object 클래스에 정의된 메서드 11개를 상속받는다.(ex. toString(), ...)

 

 

 

 

접근 제한자: protected vs private

private으로 선언한 변수는 상속받는 class에서도 사용할 수 없다.

이 경우, private이 아닌 protected로 변수를 선언해야한다.

 

protected: 하위 클래스에서는 public으로, 외부 클래스에는 private으로 작동되는 기능을 구현한 키워드 

 

 

 

 

접근 제한자(Access Modifier, 접근 제어자)의 가시성

접근 제어자의 접근 가능 여부를 나타낸 표이다.

  같은 클래스 같은 패키지 하위 클래스(자손) 외부 클래스
public O O O O
protected O O O X
default
(선언되지 않음)
O O X X
private O X X X

 

public > protected > (default) > private 순서이다.

 

public: 접근 제한 없음

protectecd: 같은 패키지 + 자손 패키지에서 접근 가능

(default): 같은 패키지에서만 접근 가능

private: 같은 클래스에서만 접근 가능

반응형