BACK-END/JAVA

상속

썬키 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();
	}
}