상속성

치로·2024년 7월 18일

상속성

1. 클래스 간의 상속이란?

: 클래스 간에는 부모 - 자식의 상속 관계를 설정할 수 있음

  • 부모 클래스 A를 자식 클래스 B가 상속 받을 때, B는 A의 모든 멤버변수와 메서드를 자신의 것으로 상속 받게 됨(단, private로 설정된 기능은 상속되지 않음)
  • 상속 가능 여부 : public, protected
  • B는 A의 public, protected 기능들을 직접적으로 코딩하지 않더라도 자신의 것으로 사용할 수 있게 됨

2. 상속 정의 방법

  • extends 키워드를 사용하여 부모 클래스의 이름을 명시
    public class 자식 클래스 extends 부모 클래스{...}

3. 클래스 다이어그램을 통한 상속의 표현

  • 클래스의 구조를 표현하는 클래스 다이어그램에서, 상속은 자식 클래스가 부모 클래스를 가리키는 화살표로 표현
  • 상속 관계가 이루어질 때 부모 클래스를 super 클래스라고 함

4. 상속의 활용

  • 기존에 존재하는 클래스의 소스 수정 없이 기능을 확장하고자 하는 경우
  • 클래스 다이어그램에서 CalcChild 클래스는 CalcParent 클래스를 상속 받기 때문에, 별도의 소스 코딩 없이도 plus() 메서드와 minus() 메서드를 포함하게 됨
  • CalcChild클래스에 times()메서드와 divide()메서드를 추가하면, 상속 받은 메서드에 새로운 기능을 추가하는 효과를 얻을 수 있음
    ####extendsclass

5. 상속의 활용2

  • 여러 개의 클래스에서 공통되는 기능을 추출하여 공유하기

연습 코드

package extendsclass;
//Main01
public class CalcParent {
		public int plus(int x, int y) {
			return x + y;
		}
		
		public int minus(int x, int y) {
			return x - y;
		}
}
package extendsclass;

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 x / y;
	}
}
package extendsclass;

public class Main01 {

	public static void main(String[] args) {
		CalcParent parent = new CalcParent();
		System.out.println(parent.plus(10, 20));
		System.out.println(parent.minus(10, 20));
		System.out.println("-------------------");
		
		CalcChild child = new CalcChild();
		System.out.println(child.plus(100, 200));
		System.out.println(child.minus(100, 200));
		System.out.println(child.times(100, 200));
		System.out.println(child.divide(200, 100));
	}

}
package extendsclass;

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 extendsclass;

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() + ", 답변 = " + answer + "]";
	}
}
package extendsclass;

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() + ", 첨부 파일 = " + fileName + "]";
	}
}
package extendsclass;

public class Main02 {

	public static void main(String[] args) {
		FileArticle file = new FileArticle();
		file.setNum(1);
		file.setTitle("첫 번쨰 자료입니다.");
		file.setFileName("java.ppt");
		System.out.println(file.toString());
		
		System.out.println("----------");
		QNAArticle qna = new QNAArticle();
		qna.setNum(1);
		qna.setTitle("첫 번째 질문입니다.");
		qna.setAnswer("첫 번째 답변입니다.");
		System.out.println(qna.toString());
	}

}

0개의 댓글