[JAVA] 상속

안요한·2022년 5월 19일
0

JAVA

목록 보기
7/16

1.1 상속의 정의와 장점

  • 상속이란, 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다.
  • 코드를 공통적으로 관리할 수 있기 때문의 추가 및 변경이 용이하다.
  • 코드의 재사용성을 높이고 중복을 제거하여 생산성과 유지보수에 기여함.

조상 클래스 : 부모(parent)클래스, 상위(super)클래스, 기반클래스

자손 클래스 : 자식(child)클래스, 하위클래스, 파생된 클래스

  • 자손클래스는 조상클래스의 모든 멤버를 상속 받으므로 항상 조상 클래스보다 같거나 많은 멤버를 갖는다.
  • 생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다.
  • 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다.

예제를 통해 확인해보자.

  • 예제 7-1/CaptionTvTest.java
class Tv {
	boolean power; 	//전원상태
	int channel;	  //채널

	void power()        {   power = !power; }
	void channelUp()    { 	 ++channel;     }
	void channelDown()  {	 --channel;	    }
}

class CaptionTv extends Tv {
	boolean caption;		 // 캡션상태
	void displayCaption(String text) {
		if (caption) {	   // 캡션상태가 on(true)일 때만 text를 보여 준다.
			System.out.println(text);
		}
	}
}

class CaptionTvTest {
	public static void main(String args[]) {
		CaptionTv ctv = new CaptionTv();
		ctv.channel = 10;				// 조상 클래스로부터 상속받은 멤버
		ctv.channelUp();				// 조상 클래스로부터 상속받은 멤버
		System.out.println(ctv.channel);
		ctv.displayCaption("Hello, World");	
		ctv.caption = true;				    //캡션(자막)을 켠다
		ctv.displayCaption("Hello, World");	
	}
}
💡 자손 클래스의 인스턴스를 생성하면 조상 클래스의 멤버와 자손 클래스의 멤버가 합쳐진 하나의 인스턴스로 생성된다.

1.2 클래스간의 관계 - 포함관계

  • 클래스간의 포함관계를 맺어 주는 것은 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것을 뜻한다.
class Circle {
		int x;
		int y;
		int r;
}

class Point {
		int x;
		int y;
}

//Point클래스를 재사용해서 Circle클래스를 작성한다면 다음과 같이 할 수 있을 것이다.

class Circle {
		Point c = new Point():
		int r;
}

1.3 클래스간의 관계 결정하기

클래스 작성시 상속관계를 맺어 줄 것인지 포함관계를 맺어 줄 것이지 결정하는 것은 혼돈스러울 수 있다.

전의 Circle클래스의 경우, 포함관계 대신 상속 관계를 맺어 준다면

//포함관계
class Circle {
		Point c = new Point();
		int r;
}

//상속관계
class Circle extends Point {
		int r;
}
  • 원(Circle)은 점(Point)이다. - Circle is a Point. (상속관계)
  • 원(Circle)은 점(Point)을 가지고 있다. - Circle has a Point. (포함관계)

→ 이처럼 '~은 ~이다.' 라는 문장이 성립한다면, 서로 상속관계를 맺어 주고, '~은 ~을 가지고 있다.'는 문장이 성립한다면 포함관계를 맺어 주면 된다.

ex) 1. 스포츠카는 자동차이다. → 자동자(조상) 상속관계

  1. Deck은 Card를 가지고 있다. → 포함관계

1.4 단일 상속

자바에서는 오직 단일 상속만을 허용한다.

그래서 둘 이상의 클래스로부터 상속을 받을 수 없다.

1.5 Object클래스 - 모든 클래스의 조상

Objcet클래스는 모든 클래스 상속계층도 최상위에 있는 조상클래스이다.

상속받지 않는 모든 클래스들은 자동적으로 Object클래스로부터 상속받는다.

profile
걍이렇게돼브렀다리

0개의 댓글