Java/자바 정리

55. 클래스 상속(Inheritance) - 부모 기능을 자식 클래스에서 확장

코딩하는냥이 2025. 5. 2. 14:34
반응형

이번 글에서는 자바의 클래스 상속(Inheritance) 개념을 학습합니다.
상속을 통해 부모 클래스의 필드와 메서드를 자식 클래스에서 재사용하고,
필요한 기능은 추가 또는 수정(오버라이딩) 할 수 있습니다.


📦 부모 클래스 코드 (Phone.java)

package ch07.sec02;

public class Phone {
	public String model, color;

	public void bell() {
		System.out.println("벨이 울립니다.");
	}

	public void sendVoice(String message) {
		System.out.println("자신 : " + message);
	}

	public void receiveVoice(String message) {
		System.out.println("상대 : " + message);
	}

	public void hangUp() {
		System.out.println("전화를 끊습니다.");
	}
}

📦 자식 클래스 코드 (SmartPhone.java)

package ch07.sec02;

public class SmartPhone extends Phone {
	public boolean wifi;

	public SmartPhone(String model, String color) {
		this.model = model;
		this.color = color;
	}

	public void setWifi(boolean wifi) {
		this.wifi = wifi;
		System.out.println("와이파이 상태를 변경했습니다.");
	}

	public void internet() {
		System.out.println("인터넷을 연결합니다.");
	}
}

📌 실행 코드 (SmartPhoneExample.java)

package ch07.sec02;

public class SmartPhoneExample {
	public static void main(String[] args) {
		SmartPhone phone = new SmartPhone("갤럭시", "은색");

		System.out.println("모델 : " + phone.model);
		System.out.println("색상 : " + phone.color);
		System.out.println("와이파이 상태 : " + phone.wifi);

		phone.bell();
		phone.sendVoice("Hello?");
		phone.receiveVoice("Hi!");
		phone.sendVoice("Oh!");
		phone.hangUp();

		phone.setWifi(true);
		phone.internet();
	}
}

💬 코드 설명

  • Phone 클래스
    → 전화 기능을 가진 부모 클래스
  • SmartPhone extends Phone
    → Phone을 상속받은 자식 클래스
  • SmartPhone 생성자
    → 부모의 model, color 필드를 직접 초기화
  • bell(), sendVoice(), receiveVoice(), hangUp()
    부모 클래스에서 상속받은 기능
  • setWifi(), internet()
    → 자식 클래스에서 새로 정의한 추가 기능

💻 실행 결과

모델 : 갤럭시
색상 : 은색
와이파이 상태 : false
벨이 울립니다.
자신 : Hello?
상대 : Hi!
자신 : Oh!
전화를 끊습니다.
와이파이 상태를 변경했습니다.
인터넷을 연결합니다.

📌 간단 정리

클래스 역할
Phone 전화의 기본 기능 제공 (벨, 통화 등)
SmartPhone Phone을 상속받아 와이파이와 인터넷 기능 추가

💡 포인트 정리

  • class 자식 extends 부모 → 상속 선언
  • 부모 클래스의 필드와 메서드는 자식 클래스에서 그대로 사용 가능
  • 자식 클래스는 기능을 확장하거나 필요 시 오버라이딩할 수 있음
  • 상속을 통해 코드 재사용성 증가, 중복 감소
  • 생성자에서는 this.필드명으로 부모 필드를 직접 초기화 가능