Java 기초 상속(4) - 컴퓨터 상속 구조
728x90
기본 환경
JDK : 1.8.0_261 버전 JRE : 1.8.0_261 버전 JAVA VERSION : 8 업데이트 261 Eclipse IDE VERSION : 2020-06버전 |
목표
컴퓨터와, 노트북, 테블릿피시로 상속으로 표현해보고 상속관계를 이해한다.
다음 게시물을 통해 상속과 소유 관계의 차이를 이해한다.
코드
package ex12inheritance;
/*
Is-A 관계
: X Is a Y => X는 Y의 일종이다로 표현가능
-노트북은 컴퓨터의 일종이다.
-휴대폰은 전화기의 일종이다.
이와 같이 Is-A관계가 성립하는 객체를 상속으로 표현하기에 적합한다.
*/
/*
컴퓨터를 표현 : 기본적인 검퓨팅 환경을 제공하여 입력된 내용을
계산한다.
*/
class Computer{
String owner; //컴퓨터 소유주 이름
// //기본 생성자
// public Computer() {
//
// }
//생성자 메소드
public Computer(String name) {
owner = name;
}
/*
private 접근지정자로 선언된 맴버메소드는 외부클래스 혹은
상속받은 클래스에서 접근이 불가능하므로, public으로 선언된
메소드를 통해서 간접 호출해야 한다.
상속관계라면 protected로 선언된 메소드로도 호출 할 수 있다.
*/
private void keyboardTouch() {
System.out.println("키보드를 통해서 입력한 ");
}
private void calculate() {
System.out.println("요청된 내용을 계산한다.");
}
/*
해당 메소드를 protected로 선언하면 상속관계의 하위 객체에서
호출 할 수 있다.
*/
public void calculateFunc() {
keyboardTouch();
calculate();
}
/*
해당 메소드는 내부에서만 접근되므로 호출 순서를 지켜
실행할 수 있도록 캡슐화 하여 정의하였다.
*/
}
/*
컴퓨터를 상속한 노트북 컴퓨터
: 컴퓨터가 가지고 있는 기본기능에 휴대이용 부분을 확장하여
정의함. 휴대이용을 위해 베터리 맴버변수가 추가됨.
*/
class NotebookComputer extends Computer{
int battary;
/*
부모 생성자 호출을 위해 사용하는 super()는 생략은 가능하지만
앞에 다른 문장이 먼저 오면 오류가 발생되므로 주의해야한다.
여기서는 부모의 인자생성자를 호출하고 있다.
*/
public NotebookComputer(String name, int initCharge) {
/*
여기서 super()를 삭제하게 되면 에러가 발생한다.
부모 클래스에서 인자생성자를 정의하였기 때문에 기본 생성자는
생성되지 않았기 때문이다.
*/
super(name);
battary = initCharge;
}
//배터리 충전을 표현한 맴버메소드
public void charging() {
battary += 5;
}
//휴대하면서 컴퓨팅을 하는 것을 표현한 맴버메소드
public void movigCal() {
if(battary < 1) {
System.out.println("배터리가 방전되어 사용불가");
return;
}
System.out.println("이동하면서");
/*
아래 메소드는 private으로 선언되었으므로 상속받은
자식 클래스에서도 접근은 불가능하다.
*/
//keyboardTouch();
//calculate();
calculateFunc();
battary -= 1;
}
}
/*
태블릿 노트북 컴퓨터 : 컴퓨터의 기본 기능 및 휴대이용 기능 그리고 펜으로 드로잉
할 수 있는 기능까지 추가된 클래스
*/
class TableNotebook extends NotebookComputer{
String regisPencil; //테블릿을 사용하기 위한 팬슬
public TableNotebook(String name, int initCharge, String pen) {
super(name, initCharge);
regisPencil = pen;
}
//태블릿 사용을 위해 배터리양 체크 및 등록된 펜인지 확인
public void write(String penInfo) {
if(battary < 1) {
System.out.println(" 베터리가 방전되서 사용 불가");
return;
}
/*
A.compareTo(B)
: 문자열 A와 B를 비교하여 0이 반환되면 같은 문자열로 판단하고
-1 혹은 1이 반환되면 서로 다른 문자열로 판단하는 String 클래스에
정의된 메소드.
*/
if(regisPencil.compareTo(penInfo) != 0) {
System.out.println("등록된 팬이 아닙니다.");
return;
}
movigCal();
System.out.println("스크린에 펜으로 그림을 그리다.");
battary -= 1;
}
}
public class E04ISAInheritance {
public static void main(String[] args) {
NotebookComputer noteBook = new NotebookComputer("공유", 5);
TableNotebook tablet = new TableNotebook("이동욱", 5, "ISE-1234");
System.out.println("=======노트북컴퓨터 사용======");
/*
베터리 소모되어 사용할 수 없는 상태가 되는지 확인하기 위해
movingCal()을 여러번 호출한다.
*/
noteBook.movigCal();
noteBook.movigCal();
noteBook.movigCal();
noteBook.movigCal();
noteBook.movigCal();
noteBook.movigCal();
noteBook.movigCal();
noteBook.movigCal();
System.out.println("==ISE-1234 펜으로 테블릿 사용 ==");
tablet.write("ISE-1234");//정상 사용
System.out.println("==XYZ-987 펜으로 테블릿 사용 ==");
tablet.write("XYZ-987"); //사용 불가
}
}
결과 값
'Java > Java_기초부터 _끝까지' 카테고리의 다른 글
Java 기초 상속(6) - overriding (0) | 2020.11.26 |
---|---|
Java 기초 상속(5) - 경찰과 총의 소유관계 (0) | 2020.11.24 |
Java 기초 상속(3) - static (0) | 2020.11.20 |
Java 기초 상속(2) - 접근제어 (0) | 2020.11.18 |
Java 기초 상속(1) - 기본개념 (0) | 2020.11.18 |