[JAVA] extends & super

고민정·2024년 4월 3일

JAVA

목록 보기
11/32


💡 상속

사회에서도 상속이라는 단어는 흔하게 쓰입니다.
쓰이는 그대로 부모의 것을 자녀가 물려받는 것을 얘기합니다.

자바에서도 마찬가지 입니다.
상위클래스의 속성을 하위클래스가 그대로 물려받는것을 상속이라고 말합니다.

상속을 하게되면 불필요한 중복 코드를 없앨 수 있습니다.

그렇다면 상속을 코드에서 어떻게 사용할까요?


💡 Extends E.g.

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
부모 객체를 나타내는 키워드

생성자를 호출 할 때 부모의 생성자가 기본 생성자이면 자녀클래스는 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가 생략은 되었지만 부모 클래스를 호출했다는 증거입니다.

0개의 댓글