7.1 상속 개념

상속은 부모가 자식에게 물려주는 행위임. 객체 지향 프로그램에서도 부모 클래스의 필드와 메소드를 자식 클래스에게 물려줄 수 있음.

image.png

image.png

B b = new B();
b.field1 = 10;
b.method1();

b.field2 = "홍길동";
b.method2();

7.2 클래스 상속

자식 클래스를 선언할 때 어떤 부모로부터 상속받을 것인지를 결정하고, 부모 클래스를 다음과 같이 extends 뒤에 기술.

public class 자식클래스 extends 부모클래스 {}

여러 개의 부모 클래스를 상속할 수 없음. 따라서 extends 뒤에는 단 하나의 부모 클래스만이 와야 함.

package ch07.sec02;

public class Phone {
    //필드 선언
    public String model;
    public String 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("전화를 끊습니다.");
    }
}
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("인터넷에 연결합니다.");
    }
}
package ch07.sec02;

public class SmartPhoneExample {
    public static void main(String[] args) {
        //SmartPhone 객체 생성
        SmartPhone myPhone = new SmartPhone("갤럭시", "은색");

        //Phone으로부터 상속받은 필드 읽기
        System.out.println("모델: " + myPhone.model);
        System.out.println("색상: " + myPhone.color);

        //SmartPhone의 필드 읽기
        System.out.println("와이파이 상태: " + myPhone.wifi);

        //Phone으로부터 상속받은 메소드 호출
        myPhone.bell();
        myPhone.sendVoice("여보세요.");
        myPhone.receiveVoice("안녕하세요! 저는 홍길동인데요.");
        myPhone.sendVoice("아~ 네, 반갑습니다.");
        myPhone.hangUp();

        //SmartPhone의 메소드 호출
        myPhone.setWifi(true);
        myPhone.internet();
    }
}

7.3 부모 생성자 호출

부모인 Phone 객체가 먼저 생성되고 그 다음에 자식인 SmartPhone 객체가 생성 됨.

자식클래스 변수 = new 자식클래스();

image.png

모든 객체는 생성자를 호출해야만 생성 됨. 부모 생성자는 자식 생성자의 맨 첫 줄에 숨겨져 있는 super()에 의해 호출 됨.

//자식 생성자 선언
public 자식클래스(...) {
	super();
}

super()는 컴파일 과정에서 자동 추가 되는데, 이것은 부모의 기본 생성자를 호출 함.

이 코드는 매개값의 타입과 개수가 일치하는 부모 생성자를 호출함.