상속의 조건(상속을 위한 클래스간의 관계)
- 모든 클래스들이 상속을 받을 수 있으나, 특정 관계의 클래스들만 상속을 하는 것이 좋습니다.
- 특정 관계가 아닌 클래스들이 상속을 받게 되면 오히려 상속받지 않은 것만 못합니다.
- 상속을 받을 조건(관계)
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 |