# 상속
l 상속이란?
- 기존의 클래스를 재 사용하여 새로운 클래스를 작성하는 것이다
- 상속을 통해서 클래스를 작성하면, 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있다
- 코드를 공통적으로 관리하기 때문에 코드의 추가 및 변경이 용이하다
- 이러한 특징은 코드의 재사용을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다
- 자바에서 상속을 구현하는 방법은 클래스 이름귀에 상속받고자 하는 클래스 이름ㅇ르 extends와 함께 써준다
상속 | |
class Tv { boolean power; // 전원상태(on/off) int channel; // 채널
void power() { power = !power; } void channelUp() { ++channel; } void channelDown() { --channel; } }
class CaptionTv extends Tv { boolean caption; // 캡션상태(on/off)
void displayCaption(String text) { if (caption) { // 캡션 상태가 on(true)일 때만 text를 보여 준다. System.out.println(text); } } }
class CaptionTvTest { public static void main(String args[]) {
CaptionTv ctv = new CaptionTv();
ctv.channel = 10; // 조상클래스로부터 상속받은 멤버 ctv.channelUp(); // 조상클래스로부터 상속받은 메소드
System.out.println(ctv.channel); ctv.displayCaption("Hello, World"); //caption이 true 상태가 아니기 때문에 출력되지 않는다
ctv.caption = true; // 캡션기능을 켠다. ctv.displayCaption("Hello, World"); // 캡션을 화면에 보여 준다.
}
| |
결과값 | 11 Hello, World |
상속(채널과 캡션 입력) | |
package bigdata;
import java.util.Scanner;
class Tv { boolean power; // 전원상태(on/off) int channel; // 채널
void power() { power = !power; }
void channelUp() { ++channel; }
void channelDown() { --channel; } }
class CaptionTv extends Tv { boolean caption; // 캡션상태(on/off)
void displayCaption(String text) { if (caption) { // 캡션 상태가 on(true)일 때만 text를 보여 준다. System.out.println(text); } } }
class examples { public static void main(String args[]) { Scanner sc = new Scanner(System.in); CaptionTv ctv = new CaptionTv(); ctv.channel = 10; System.out.println("현재 채널은 10번입니다. 채널을 올릴까요?"); String input = sc.nextLine(); if (input.equals("yes")) { ctv.channelUp(); } System.out.println("캡션을 킬까요?"); input = sc.nextLine(); if (input.equals("no")) { ctv.caption = false; } System.out.println(ctv.channel); ctv.displayCaption("Hello, World"); } } | |
결과값 | 11 Hello, World |
l 상속의 is-a 관계와 has-a의 관계
l 상속의 is-a 관계
- 학생은 사람이니까 사람이 가지고 있는 기능을 가져야 한다
(관계 : 학생 is a 사람)
- 교수도 사람이니깐 사람이 가지고 있는 기능을 가져야 한다
(관계 : 교수 is a 사람)
- 상속 관계가 되려면 최소한의 기본관계(is-a 관계)는 성립 되야 한다
l 오버라이딩
- 학생과 교수는 사람을 상속 받았기 떄문에 사람의 메소드를 다 실행할 수 있는데 study라는 메소드를 실행할 때는 다른 메시지(기능)가 출력되게 하려면 오버라이딩을 해야한다
오버라이딩 | |
class people { public void breath() { System.out.println("숨을 쉽니다 "); }
public void eat() { System.out.println("밥을 먹습니다. "); }
public void sleep() { System.out.println("잠을 잡니다. "); }
public void study() { System.out.println("공부를 합니다."); }
}
class student extends people { public void study() { System.out.println("자바를 공부합니다. "); } // 오버라이딩 }
class profession extends people { public void study() { System.out.println("연구를 합니다."); } // 오버라이딩 }
class overrideexample {
public static void main(String[] args) { people p1 = new people(); student s1 = new student(); profession pro1 = new profession();
pro1.study();
s1.study();
} } | |
결과값 | 연구를 합니다. 자바를 공부합니다.
|
오버라이딩 | |
class people { public void breath() { System.out.println("숨을 쉽니다 "); }
public void eat() { System.out.println("밥을 먹습니다. "); }
public void sleep() { System.out.println("잠을 잡니다. "); }
public void study() { System.out.println("공부를 합니다."); }
}
class student extends people { public void study() { System.out.println("자바를 공부합니다. "); } // 오버라이딩 }
class profession extends people { public void study() { System.out.println("연구를 합니다."); } // 오버라이딩 }
class overrideexample {
public static void main(String[] args) { people p1 = new people(); student s1 = new student(); profession pro1 = new profession();
pro1.study();
s1.study();
} } | |
결과값 | 연구를 합니다. 자바를 공부합니다.
|
오버라이딩2 | |
class police { public void arrest() { System.out.println("체포를 합니다 "); }
public void arrest2() { System.out.println("수갑을 채웁니다 "); }
public void gun() { System.out.println("총을 쏩니다"); }
}
class traPolice extends police { public void gun() { System.out.println("스피드건을 쏩니다. "); } // 오버라이딩 }
class StrongPolice extends police { public void gun() { System.out.println("기관총을 쏩니다."); } // 오버라이딩 }
class overrideexample {
public static void main(String[] args) { police p1 = new police(); traPolice p2 = new traPolice(); StrongPolice sp1 = new StrongPolice();
p1.gun(); p2.gun(); sp1.arrest(); //gun외의 모든 조건을 상속받았기 때문에 police의 메소드를 수행할 수 있다
} } | |
결과값 | 총을 쏩니다 스피드건을 쏩니다. 체포를 합니다
|
'빅데이터과정 > JAVA' 카테고리의 다른 글
#55_140902_JAVA_자바 개념정리 (0) | 2014.09.02 |
---|---|
#55_140902_JAVA_행번호 보이게 하기 (0) | 2014.09.02 |
#55_140829_JAVA_FOR EACH (0) | 2014.08.29 |
#55_140829_JAVA_배열 (0) | 2014.08.29 |
#55_140829_JAVA_SCANNER CLASS (0) | 2014.08.29 |