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


B b = new B();
b.field1 = 10;
b.method1();
b.field2 = "홍길동";
b.method2();
자식 클래스를 선언할 때 어떤 부모로부터 상속받을 것인지를 결정하고, 부모 클래스를 다음과 같이 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();
}
}
부모인 Phone 객체가 먼저 생성되고 그 다음에 자식인 SmartPhone 객체가 생성 됨.
자식클래스 변수 = new 자식클래스();

모든 객체는 생성자를 호출해야만 생성 됨. 부모 생성자는 자식 생성자의 맨 첫 줄에 숨겨져 있는 super()에 의해 호출 됨.
//자식 생성자 선언
public 자식클래스(...) {
super();
}
super()는 컴파일 과정에서 자동 추가 되는데, 이것은 부모의 기본 생성자를 호출 함.
이 코드는 매개값의 타입과 개수가 일치하는 부모 생성자를 호출함.