백엔드 수업 #07 상속 - 02 클래스 상속

sookyoung.k·2022년 11월 28일
0

프로그램 상속이 현실의 상속과 다른 점
: 자식이 부모를 선택한다!

extends 뒤에 상속받을 부모 클래스를 기술하면 된다.

다른 언어와 다르게 자바는 다중 상속을 허용하지 않는다.

extends 뒤에는 단 하나의 부모 클래스만 와야 한다.

// 부모 클래스
public class Phone { // 클래스 = 설계도 (new를 만들기 전까진 실존하지 않는 것)
	// 필드
	public String model; // 모델명
	public String color; // 컬러
	
	// 생성자
	public Phone() {
		System.out.println("부모 생성자 실행");
	}

	// 메소드
	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("전화를 끊습니다.");
	}
}

// 자식 클래스
public class SmartPhone extends Phone { 
	// 필드
	public boolean wifi;
	

	// 생성자
	public SmartPhone(String model, String color) {
		super(); // 부모 생성자 호출 (매개변수가 없으면 이런 식으로 써주면 된다.) 
//		super(model, color); 매개변수를 여기서 바로 넣어줘도 된다. 
		System.out.println("자식 생성자 호출"); // 이러면 부모 생성자가 먼저 실행된 후 자식 생성자가 실행된다. 
		this.model = model; // 이 부분은 부모 필드에 접근해서 값을 주는 것일 뿐임. 
		this.color = color;
	}
	/*
	public SmartPhone(String model, String color) { // 부모 클래스의 필드에서 상속받아와서 사용 가능!!!
		// 부모 클래스에서 생성자를 따로 지정해주지 않았을 때는 this.를 통해서 접근 
//		this.model = model; // 부모 필드에 접근 가능 
//		this.color = color; // 부모 필드에 초기값을 준다. 
		// 부모 클래스에 명시적으로 지정된 생성자가 있을 때 super 사용! 
		super(model, color); // 부모 생성자 호출
	}
	*/
	
	// 메소드 
	public void setWifi(boolean wifi) {
		this.wifi = wifi;
		System.out.println("와이파이 상태 변경");
	}
	public void internet() {
		System.out.println("인터넷에 연결합니다.");
	}
}

// 자식 클래스 실행
public class SmartPhoneEX {

	public static void main(String[] args) {
    	// SmartPhone 객체 생성 
		SmartPhone myPhone = new SmartPhone("아이폰XR", "흰색");
		
		//Phone에서 상속받은 필드 읽기: 자식 객체에도 부모 필드에 접근 가능
		System.out.println(myPhone.model + ", " + myPhone.color);
		
		
		//phone에서 상속받은 메소드: 자식 객체에서 부모 메소드에 접근 가능 
		myPhone.bell();
		myPhone.sendVoice("가제트루나씨인가요?");
		myPhone.receiveVoice("네 마씁니다");
		myPhone.hangUp();
		
		myPhone.setWifi(false);
		System.out.println(myPhone.wifi);
	}

}

[출력 결과]
부모 생성자 실행
자식 생성자 호출
아이폰XR, 흰색
벨이 울립니다.
자기 목소리: 가제트루나씨인가요?
상대방 목소리: 네 마씁니다
전화를 끊습니다.
와이파이 상태 변경
false

profile
영차영차 😎

0개의 댓글