이번 편의 목표: extends로 전자책이 종이책의 제목과 연체 일수를 물려받게 하고, super로 부모 생성자를 호출합니다.
전자책에도 제목과 연체 일수가 있습니다. 필드를 복사해 새 클래스를 만들면 검사 규칙을 두 곳에 적게 됩니다. 전자책은 종이책의 특별한 종류라고 보면 상속이 맞습니다.
부모 생성자 호출
파일 Book.java는 11편 그대로 둡니다. 전자책은 EBook.java입니다.
public class EBook extends Book {
private final String fileName;
public EBook(String title, int lateDays, String fileName) {
super(title, lateDays);
if (fileName == null || fileName.isBlank()) {
throw new IllegalArgumentException("파일 이름이 필요합니다.");
}
this.fileName = fileName.trim();
}
public String getFileName() {
return fileName;
}
}extends Book은 EBook이 Book을 상속한다는 선언입니다. super(title, lateDays)는 부모 생성자를 호출합니다. 부모에게 기본 생성자가 없고 매개변수가 있는 생성자만 있으면, 자식 생성자의 첫 줄에서 super를 호출해야 합니다.
부모의 title과 lateDays는 private입니다. 자식 클래스 안에서도 그 필드를 직접 읽을 수 없습니다. getTitle과 getLateDays를 사용합니다. private은 상속되어 객체 안에 존재하지만, 접근은 선언한 클래스 안으로 제한됩니다.
EBook ebook = new EBook("파이썬 기초", 2, "python.epub");
System.out.println(ebook.getTitle());
System.out.println(ebook.getLateDays());
System.out.println(ebook.getFileName());
System.out.println(ebook.lateFee());출력은 파이썬 기초, 2, python.epub, 200입니다. lateFee는 아직 부모 규칙인 하루 100원입니다. 전자책만 하루 50원으로 바꾸는 일은 다음 편에서 메서드를 재정의하며 합니다.
자바 클래스는 부모를 하나만 둘 수 있습니다. extends 뒤에 클래스는 한 개입니다. 모든 클래스의 최상위에는 Object가 있습니다. 직접 적지 않아도 Book은 Object를 상속합니다.
직접 해 보기
EBook을 하나 만들어 파일 이름까지 출력하고, 부모의 lateFee 결과도 함께 출력하세요.
해설
EBook ebook = new EBook("자바 입문", 4, "java.epub");
System.out.println(ebook.getFileName());
System.out.println(ebook.lateFee());파일 이름은 java.epub이고 연체료는 400입니다. 4일 곱하기 100원입니다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.