본문 바로가기

Study/Java

[Java] 자바의 상속

기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 자손이 되는 클래스는 부모 클래스의 모든 멤버를 상속받는다. 자손 클래스는 조상 클래스의 모든 멤버를 상속받으므로 항상 조상 클래스보다 같거나 많은 멤버를 갖는다.

  • 상속의 상속을 거듭할수록 멤버 개수는 늘어난다.
  • 생성자와 초기화 블럭은 상속되지 않는다.

상속을 통해 코드를 한 곳에서 관리함으로써 코드의 중복을 줄일 수 있다.

포함관계 및 관계설정

클래스의 멤버 변수로 다른 클래스 타입의 참조 변수를 선언하는 것이다. 다른 클래스 타입의 참조 변수를 멤버로 사용하는 것일 뿐, 내부에 클래스를 새로 정의한 것은 아니기 때문에 내부 클래스와는 다르다!

class Circle {

	int point = new Point(); // Point 클래스를 포함한다.
	int r;

}
class Point {

	int x;
	int y;

}

그렇다면 객체를 만들 때 상속관계인지 포함관계인지를 확신할 수 있을까.. 늘 정확하진 않아도 어느 정도 이를 쉽게 구분할 수 있는 지표가 존재한다.

  • 상속 ⇒ sportsCar Car이다. (~는 ~이다)
  • 포함 ⇒ Circle은 Point를 가지고 있다. (~은 ~을 가지고 있다)

단일 상속?

  • 다중 상속을 받는 클래스 모두 같은 이름을 가진 메소드가 존재한다면(매개변수 포함) 이를 어떻게 구별할 지에 대한 문제가 발생하므로, 자바는 단일 상속만을 허용한다.

  • 인터페이스는 다중 상속이 가능하다.

상속 VS 포함

  • 상속 ⇒ sportsCar Car이다. (~는 ~이다)
  • 포함 ⇒ Circle은 Point를 가지고 있다. (~은 ~을 가지고 있다)

단일 상속

  • 다중 상속을 받는 클래스 모두 같은 이름을 가진 메소드가 존재한다면(매개변수 포함) 이를 어떻게 구별할 지에 대한 문제가 발생하므로, 자바는 단일 상속만을 허용한다.
  • 인터페이스는 다중 상속이 가능하다.

모든 클래스의 조상, Object

모든 상속 계층도의 최상위에 있는 조상 클래스이다. 우리가 생성하는 모든 클래스는 이 Object 클래스의 상속을 받으며 컴파일러가 자동적으로 클래스에 extends Object를 추가한다.

'Study > Java' 카테고리의 다른 글

[Java] 패키지와 import  (0) 2020.03.12
[Java] 오버라이딩  (0) 2020.03.12
[Java] 변수의 초기화  (0) 2020.03.10
[Java] 생성자와 this  (0) 2020.03.10