본문 바로가기
study/JAVA

상속(Inheritance) - 클래스 상속

by Elfen Lied 2022. 2. 24.
반응형

- 상속

  • 자식(하위) 클래스가 부모(상위) 클래스의 멤버를 물려받는 것
  • 자식 부모를 선택해서 물려받음
  • 상속 대상: 부모의 필드와 메서드

 

- 상속의 효과

  • 부모 클래스를 재사용해서 자식 클래스를 빨리 개발할 수 있다.
  • 반복의 코드의 중복을 줄여준다.
  • 유지 보수의 편리성을 제공해 준다.
  • 객체의 다형성을 구현을 수 있다.

 

- 상속 대상의 제한

  • 부모 클래스의 private 접근을 갖는 필드와 메서드는 제외됨
  • 부모 클래스가 다른 패키지에 있을 경우, default 접근을 갖는 필드와 메서드로 제한됨

 


 

 - 실습

 1. 부모 클래스 생성

public class CellPhone {
	String model;
	String color;
	
	void powerOn() { System.out.println("전원을 켭니다.");}
	void powerOff() { 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("전화를 끕니다.");}
}

 

2. 상속받을 자식 클래스 생성

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 방송 수신을 멈춥니다.");
	}
}

 

3. 실행 클래스를 만들어서 실행

public class DmbCellPhoneExample {
	public static void main(String[] args) {
		DmbCellPhone dmbCellPhone = new DmbCellPhone("자바폰", "검정", 10);
		
		System.out.println("모델 : " + dmbCellPhone.model);
		System.out.println("색상 : " + dmbCellPhone.color);
		System.out.println("채널 : " + dmbCellPhone.channel);
		
		dmbCellPhone.powerOn();
		dmbCellPhone.bell();
		dmbCellPhone.sendVoice("여보세요");
		dmbCellPhone.receiveVoice("안녕하세요! 저는 홍길동인데요");
		dmbCellPhone.sendVoice("아~ 예 반갑습니다.");
		dmbCellPhone.hangUp();
		
		dmbCellPhone.turnOnDmb();
		dmbCellPhone.changeChannelDmb(12);
		dmbCellPhone.turnOffDmb();
	}
}

 

필드와 메서드를 다 상속받을 수 있기 때문에 실행하면 다음과 같은 결과가 나온다.

반응형

'study > JAVA' 카테고리의 다른 글

부모 생성자 호출(super(...))  (0) 2022.02.24
어노테이션(Annotation)  (0) 2022.02.22
Getter와 Setter  (0) 2022.02.18
접근 제한자( Access Modifier)  (0) 2022.02.18
상수(static final)  (0) 2022.02.14

댓글