
사회에서도 상속이라는 단어는 흔하게 쓰입니다.
쓰이는 그대로 부모의 것을 자녀가 물려받는 것을 얘기합니다.
자바에서도 마찬가지 입니다.
상위클래스의 속성을 하위클래스가 그대로 물려받는것을 상속이라고 말합니다.
상속을 하게되면 불필요한 중복 코드를 없앨 수 있습니다.
그렇다면 상속을 코드에서 어떻게 사용할까요?
public class + class name + extends + parent's class name
자녀 클래스 extends 부모 클래스
위와 같이 적어주시면 상속하겠다는 선언을 마친 것 입니다.
자녀 클래스가 부모 클래스를 상속함으로써 메소드와 같은 기능을 중복하여 작성하지 않고도 사용 가능합니다.
아래 코드 예시와 함께 설명해 드리도록 하겠습니다.
//This is a Parent Class
public class Parent {
int number;
public Parent(int number){
this.number = number;
}
public int changeInt(){
int result = this.number + 10;
return result;
}
}
부모 클래스는 간단하게 생성자로 숫자를 받고 그 숫자에 메서드로 10을 더해서 반환하는 기능을 행동을 가진 클래스 입니다.
//this is a Child Class
public class Child extends Parent{
public Child(int number) {
super(number);
}
public void print(){
int result = changeInt();
System.out.println(result);
}
}
위 코드를 보면 print( ) 라는 메서드에서 changeInt( ) 라는 메서드를 호출하여 정수값을 저장하고 있습니다.
하지만 child 클래스에는 아무리 봐도 changeInt( ) 라는 메서드는 없죠.
부모클래스에서 상속받았기 때문입니다.
단, Parent Class 에서 print( ) 메서드는 작동하지 않습니다.
역순이기 때문입니다.
자식은 부모의 기능을 상속받을 수 있어도,
부모는 자식의 기능을 상속받을 수 없습니다.
// this is a running class about child
public class ChildExam {
public static void main(String[] args) {
Child child = new Child(30);
child.print();
}
}
위 코드를 작동시키면 30에서 10이 더해진 40이 잘 나옵니다.

위에 앞선 코드에서 익숙치 않은 단어가 포함되어 있었을 것 입니다.
바로 super 입니다.
super
부모 객체를 나타내는 키워드
생성자를 호출 할 때 부모의 생성자가 기본 생성자이면 자녀클래스는 super 를 이용해 자동으로 부모 클래스를 호출합니다.
아래 예제로 자세히 설명하겠습니다.
//this is a Parent Class
public Car(){
System.out.println("My name is Andy");
}
//this is a Child Class
public Truck(){
super(); //this is an option
System.out.println("Truck's number is 1234");
}
//this is a main class
public static void main(String[] args){
Truck t = new Truck();
}
Truck 생성자를 보면 super( ) 라는 코드가 있습니다.
이 super( ) 는 부모가 기본 생성자라면 선택적으로 써도 좋습니다.
하지만 만약 부모가 기본 생성자가 아니라면 괄호 사이에 받아야 하는 파라미터를 써주면 됩니다.
//this is a Parent Class
public Parent(int number){
this.number = number;
}
부모 클래스의 생성자가 파라미터로 number 를 받아야 합니다.
때문에 아래있는 자녀 생성자에서 super를 이용하여 부모의 생성자를 호출해줍니다.
//this is a Child Class
public class Child extends Parent{
public Child(int number) {
super(number);
}
다시 super 의 예제 코드로 돌아오겠습니다.
기본 생성자라 super( ) 가 생략되어도 ,
만약 main 을 실행해보면 부모 클래스에 있는
My name is Andy 가 먼저 나오고 그 다음으로 자식 클래스인 Truck's number is 1234 가 나옵니다.
이는 super가 생략은 되었지만 부모 클래스를 호출했다는 증거입니다.