썬키
2021. 11. 29. 20:46
21.11.29
:상속
①상속 개념
상속(inheritance)이란?
현실 세계:
-부모가 자신에게 물려주는 행위
-부모가 자식을 선택해서 물려줌
객체 지향 프로그램:
-자식(하위,파생)클래스가 부모(상위)클래스의 멤버를 물려받는것
-자식이 부모를 선택해서 물려받음
-상속 대상: 부모의 필드와 메소드
UML 에서 사용되는 상속 기호 : ↑
상속의 효과
-부모 클래스를 재사용해서 자식 클래스를 빨리 개발할 수 있다.
-반복된 코드의 중복을 줄여준다.
-유지 보수의 편리성을 제공해 준다.
-객체의 다형성을 구현할 수 있다.
상속 대상의 제한
-부모 클래스의 private 접근을 갖는 필드와 메소드는 제외된다.
-부모 클래스가 다른 패키지에 있을 경우, default 접근을 갖는 필드와 메소드도 제
한된다.
②부모 생성자 호출
-부모 생성자가 호출 완료되고, 자식 생성자가 나중에 호출 완료된다.
<부모 클래스>
public class CellPhone {
//필드
String model;
String color;
//생성자
public CellPhone() {
System.out.println("CellPhone 생성자... - 부모 클래스");
}
//메소드
void powerOn() {System.out.println("전원을 켭니다.");}
void powwerOff() {System.out.println("전원을 끕니다.");}
void bell() {System.out.println("벨이 울립니다.");}
void sendVoice(String message) {System.out.println("자기: " + message);}
void receiveVoice(String message) {System.out.println("상대방: " + message);}
void hangUp() {System.out.println("전화를 끊습니다.");}
}
<자식 클래스>
public class DmbCellPhone extends CellPhone{
//필드
int channel;
//생성자
DmbCellPhone(String model, String color, int channel){
this.model=model;
this.color=color;
this.channel=channel;
}
//메소드
void turnOnDmb() {
System.out.println("채널 " + channel + "번 DMB 방송 수신을 시작합니다.");
}
void changeChannelDmb(int channel) {
this.channel=channel;
System.out.println("채널 " + channel + "번으로 바꿉니다.");
}
void turnOffDmb() {
System.out.println("DMB 방송 수신을 멈춥니다.");
}
}
<실행 클래스>
public class DmbCellPhoneExample {
public static void main(String[] args) {
//DmbCellPhone 객체 생성
DmbCellPhone dmbCellPhone = new DmbCellPhone("자바폰", "검정", 10);
//Cellphone으로부터 상속받은 필드
System.out.println("모델: " + dmbCellPhone.model);
System.out.println("색상: " + dmbCellPhone.color);
//DmbCellPhone의 필드
System.out.println("채널: " + dmbCellPhone.channel);
//CellPhone으로부터 상속받은 메소드 호출
dmbCellPhone.powerOn();
dmbCellPhone.bell();
dmbCellPhone.sendVoice("여보세요");
dmbCellPhone.receiveVoice("안녕하세요! 저는 홍길동인데요");
dmbCellPhone.sendVoice("아~ 예 반갑습니다.");
dmbCellPhone.hangUp();
//DmbCellPhone의 메소드 호출
dmbCellPhone.turnOnDmb();
dmbCellPhone.changeChannelDmb(12);
dmbCellPhone.turnOffDmb();
}
}