- 기존에 존재하는 클래스의 소스 수정없이 기능을 확장하고자 하는 경우
-> CalcChild 클래스는 CalcParent 클래스를 상속받기 때문에, 별도의 소스코딩 없이도 plus() 메서드와 minus() 메서드를 포함하게 된다
-> CalcChild 클래스에 times()메서드와 divide() 메서드를 추가하면, 상속받는 메서드에 새로운 기능을 추가하는 효과를 얻을 수 있다.
package extandsclass;
public class CalcParent {
public int plus(int x, int y) {
return x + y;
}
public int minus(int x, int y) {
return x - y;
}
}
package extandsclass;
public class CalcChild extends CalcParent{
public int times(int x, int y) {
return x * y;
}
public int divide(int x, int y) {
int result = 0;
if(y != 0) {
result = x / y;
}
return result;
}
}
package extandsclass;
public class Main01 {
public static void main(String[] args) {
CalcParent parent = new CalcParent();
System.out.println(parent.plus(100, 50));
System.out.println(parent.minus(100, 50));
System.out.println("------------------------------");
CalcChild child = new CalcChild();
System.out.println(child.divide(200, 100));
System.out.println(child.times(200, 100));
System.out.println(child.plus(200, 100));
System.out.println(child.minus(200, 100));
}
}
- 여러개의 클래스에서 공통되는 기능을 추출하여 공유하기
-> 질문/ 답변 게시물의 한 단위를 표현하기 위한 QNAArticle 클래스와 자료실의 게시물을 표현하기 위한 FileArticle은 글 번호와 제목이라는 공통된 특성을 갖는다
-> Article 클래스는 QNAArticle 클래스와 FileArticle 클래스가 공통적으로 포함하고 있는 멤버변수인 "글번호(num)", "제목(title)"과 이 변수들에
대한 getter, setter를 추출한 것이다
-> 이와 같이 공통 기능을 별도의 클래스로 추출해 내면, 코드의 재사용 및 수정이 용이하다
package extandsclass;
public class Article {
private int num;
private String title;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
package extandsclass;
public class QNAArticle extends Article{
private String answer;
public String getAnswer(){
return answer;
}
public void setAnswer(String answer) {
this.answer = answer;
}
public String toString() {
return "질문/답변 [글번호 = " + getNum()
+ ", 제목 = " + getTitle()
+ ", 답변 = " + getAnswer();
}
}
package extandsclass;
public class FileArticle extends Article {
private String fileName;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String toString() {
return "자료실[번호 = " + getNum()
+ " , 제목 = "+ getTitle()
+ " , 첨부파일 = " + getFileName()
+ " ] ";
}
}
package extandsclass;
public class Main02 {
public static void main(String[] args) {
QNAArticle qna = new QNAArticle();
qna.setNum(1);
qna.setTitle("첫 번째 질문입니다.");
qna.setAnswer("첫 번째 답변입니다.");
System.out.println("질문/답변 [글번호 = " + qna.getNum()
+ ", 제목 = " + qna.getTitle()
+ ", 답변 =" + qna.getAnswer());
System.out.println(qna.toString());
System.out.println("=========================================");
FileArticle file = new FileArticle();
file.setNum(10);
file.setTitle("10번째 자료입니다.");
file.setFileName("dat10.ppt");
System.out.println(file.toString())
}
}