#014. inheritance (상속) 알아보자...
1. 자바에서 상속은 부모클래스(SuperClass) 의 변수, 메서드, 생성자 등을 자식클래스(SubClass) 에게 사용 할 수 있도록 해주는 것이다.
1) 자식클래스는 하나의 부모클래스만 가질 수 있다.
2) 자식클래스는 부모의 모든 것을 받아야 하며, 부분적으로 받을 수 없다.
3) 부모의 private 접근제한자 와 생성자는 물려주지 않는다.
4) 자식객체가 생성될 때 부모의 객체도 같이 생성이 된다.
2. 아래 예제를 통해 자세히 알아보자.
우선 학교가 있다. 학교에는 학생과 교수가 있다. 학교에는 학과, 성명 의 저장공간이 있고, 그 내용을 출력하는 기능이 있다. 학교에서는 학생과 교수의 학과, 성명 이 필요하고, 그 내용을 확인할 수 있어야 한다. 학생은 학년, 성적 이란 저장공간이 필요하고, 수업을 듣는 기능이 필요하다. 교수는 과목 이란 저장공간이 필요하고, 연구하는 기능이 필요하다. 학생과 교수는 학과, 성명 의 공간을 따로 가질 필요가 없이 학교로부터 상속을 받으면 된다. |
3. 위 가정을 통해서 우리는 아래와 같이 코딩을 해보겠다.
패키지는 oop2 로 한다. 학교 = School Class 로 한다. dept, name 변수와 printer() 메서드를 만든다. 학생 = Student Class 로 한다. grade, score 변수와 study() 메서드를 만든다. 교수 = Professor Class 로 한다. subject 변수와 research() 메서드를 만든다. 테스트 = SchoolDemo Class 로 테스트를 한다. |
1) 학교 class (School.java)
코드 | package oop2; public class School { String dept; String name;
public void printer(){ System.out.println("학과:"+dept+", 성명:"+name); } } |
설명 | 학교 클래스에 학과, 성명 변수와 출력 기능을 만들었다. |
2) 학생 class (Student.java)
코드 | package oop2; public class Student extends School { int grade; int score;
public void study(){ System.out.println("수업을 듣습니다..."); } } |
설명 | 문장2: extends School 키워드를 통해 School 로 부터 상속을 받는다. 학생 클래스는 학년, 점수 변수와, 공부를 한다는 메서드를 하나 만들었다. |
3) 교수 class (Professor.java)
코드 | package oop2; public class Professor extends School { String subject;
public void research(){ System.out.println("연구를 합니다..."); } } |
설명 | 문장2: extends School 키워드를 통해 School 로 부터 상속을 받는다. 교수 클래스에 과목 변수와 연구 메서드를 만들었다. |
4) 데모 class (SchoolDemo.java)
코드 | package oop2; public class SchoolDemo { public static void main(String[] args) {
Student st = new Student(); st.dept = "전산학과"; st.name = "김동혁"; st.grade = 2; st.score = 99;
Professor pr = new Professor(); pr.dept = "국어국문"; pr.name = "김교수"; pr.subject = "언어학";
st.printer(); pr.printer(); } } |
결과 | 학과:전산학과, 성명:김동혁 학과:국어국문, 성명:김교수 |
설명 | 문장5,11: 학생과 교수는 각각의 객체를 생성한다. 문장6,7,12,13: School의 멤버변수에 값을 지정한다. (부모의 변수공간을 사용) 문장8,9,14: 자기 자신의 멤버변수에 값을 할당했다. 문장16,17: School의 멤버메서드 printer 기능을 사용해서 결과를 출력하고 있다. |
4. 그럼 우리는 메서드 오버로드의 기능을 통해 학생과 교수의 기능을 사용할 수 있다.
SchoolDemo class 의 내용을 아래와 같이 변경 해보자.
코드 | package oop2; public class SchoolDemo { public static void printerTest(School sc) { sc.printer(); } public static void printerTest(Student st) { st.study(); } public static void printerTest(Professor pr) { pr.research(); }
public static void main(String[] args) { Student st = new Student(); st.dept = "전산학과"; st.name = "김동혁"; st.grade = 2; st.score = 99; Professor pr = new Professor(); pr.dept = "국어국문"; pr.name = "김교수"; pr.subject = "언어학"; printerTest(st); printerTest(pr); } } |
결과 | 수업을 듣습니다... 연구를 합니다... |
설명 | 문장3,4,5: 파라메터의 타입이 다르기 때문에 오버로드 기능이 가능하다. 문장17: printerTest(st) 는 문장4 가 실행되어 수업을 듣습니다. 라고 문구가 출력이 된다. 문장18: printerTest(pr) 는 문장5 가 실행되어 연구를 합니다. 라고 문구가 출력이 된다. 여기서 main 메서드(문장7)가 static 임으로 문장3,4,5 도 static 으로 선언이 되어야 호출을 할 수가 있다. |
그럼 다음 시간엔 위 예제로 up / down casting 을 알아보자...
잡담. 설명이 참 어렵네요. ㅠㅠ 오늘도 화이팅 입니다. 감사합니다.(__)
'Developer > Java-oop' 카테고리의 다른 글
#016. method overriding (메서드 재정의) 알아보기... (0) | 2011.04.01 |
---|---|
#015. upcasting / downcasting 알아보자... (0) | 2011.03.31 |
#013. package / import 알아보자... (0) | 2011.03.30 |
#012. access modifier (접근제한자) 알아보기... (0) | 2011.03.30 |
#011. Array (배열) 알아보기... (1) | 2011.03.29 |