본문 바로가기

Java/본격 Java 상속

[Java] 상속 is-a관계

상속의 조건(상속을 위한 클래스간의 관계)
 - 모든 클래스들이 상속을 받을 수 있으나, 특정 관계의 클래스들만 상속을 하는 것이 좋습니다.
 - 특정 관계가 아닌 클래스들이 상속을 받게 되면 오히려 상속받지 않은 것만 못합니다.
 - 상속을 받을 조건(관계)
  is-a관계
하위클래스 is a 상위클래스의 관계로 하위클래스가 상위클래스의 한 종류가 되어야 합니다.
해석 : '하위클래스'는 일종의 '상위클래스'이다.
is a 관계일 경우 상속을 받아도 무방합니다.

.

.

접근방법

 - Computer와 Notebook과 Tablet이 서로 is-a관계인지 확인한다.

예제

class Computer
{
	String owner;
	public Computer(String name){ owner= name; }
	public void calculate(){
		System.out.println("요청 내용을 계산합니다.");
	}
}

class Notebook extends Computer
{
	// Notebook은 일종의 Computer이므로 상속받아도 됨.
	// Computer클래스를 상속 받으므로 Computer클래스가 가진 모든 기능을 Notebook도 가지고 있으므로
	// Notebook클래스는 Computer의 기능을 제외한 Notebook 전용의 기능(메소드)과 값(변수)를 지정하면 됨.
	int battery; // Computer클래스에는 없지만 Notebook클래스에는 필요한 멤버변수
	public Notebook(String name, int initChag){
		super(name);
		battery = initChag;
	}
	public void charging(){ battery += 5; }
	// Computer클래스에는 없으나 Notebook클래스에는 필수인 메소드 정의
	public void movingCal(){
		if(battery < 1){
			System.out.println("층전이 필요합니다.");
			return;
		}
		System.out.println("이동하면서");
		calculate(); // 상위클래스에 있는 메소드로서 하위클래스에서 호출하여 사용
		battery -= 1;
	}
}

class Tablet extends Notebook
{
	// Tablet은 일종의 Notebook이자 Computer이므로 상속받아도 됨.
	// Notebook클래스를 상속 받음으로서 Notebook클래스의 특징과 Computer클래스의 기능을 모두 상속받는 효과를 가짐.
	// 단, Tablet이 Notebook의 일종이어야 함.
	String regstPenModel;
	public Tablet(String name, int initChag, String pen){
		super(name, initChag);
		regstPenModel  = pen;
	}
	public void write(String penInfo){
		if (battery < 1)
		{
			System.out.println("충전이 필요합니다.");
			return;
		}
		if (!regstPenModel.equals(penInfo))
		{
			System.out.println("등록된 펜이 아닙니다.");
			return;
		}
		System.out.println("필기 내용을 처리합니다.");
		battery -= 1;
	}
}
class ISAInheri{
	public static void main(String[] args) 
	{
		Notebook nb = new Notebook("홍길동", 5);
		Tablet tn = new Tablet("전우치", 5, "ISE-1234");

		nb.movingCal();
		tn.write("ISE-1234");
	}
}
728x90
반응형

'Java > 본격 Java 상속' 카테고리의 다른 글

[Java] 오버라이딩(overriding)  (0) 2020.06.30
[Java] 상속 has-a관계  (0) 2020.06.29
[Java] static 상속  (0) 2020.06.29
[Java] 상속 실습  (0) 2020.06.29
[Java] 상속 기초  (0) 2020.06.29