[Java] 상속에 대해 알아보자

반응형

상속

Java의 대표적인 기능 중 하나이다.

Class 내의 함수 혹은 필드를 그대로 다른 Class에게 전달하는 의미이다.

 

물건을 다른 사람에게 전달해주듯 변수명, 함수명을 같이 사용할 수 있도록 한다.

 

 

class TestA {

    void testA() {
        System.out.println("testA의 전유물");
    }
}

class TestB extends TestA {

    void testB() {
        System.out.println("testB의 전유물");
    }
}

public class ExtendStudy {
    public static void main(String[] args) {
        TestB testB = new TestB();
        testB.testA();
        testB.testB();
    }
}

코드의 결과물

TestB의 Class만을 호출했지만, TestA Class의 testA() 함수를 사용하는 것을 확인할 수 있다.

이는 TestA를 TestB가 상속함으로써 TestB는 TestA의 함수의 소유권을 가져올 수 있도록 할 수 있다.

 

extend를 통해서 위에를 호출한다.

여기서 알 수 있는 것은 main에서 TestA Class의 내용을 불러올 수 있던 것은 extends TestA하고의 연관선이 있다는 것을 추측할 수 있게 된다.

 

 

언제 상속을 호출 할까?

package Test;

class TestA {

    TestA() {
        System.out.println("1번째: 여기가 제일 먼저");
    }

    void testA() {
        System.out.println("testA의 전유물");
    }
}

class TestB extends TestA {

    TestB() {
        super();
        System.out.println("2번째: super()는 생략이 되었다.");
    }

    void testB() {
        System.out.println("testB의 전유물");
    }
}

public class ExtendStudy {
    public static void main(String[] args) {
        TestB testB = new TestB();
        testB.testA();
        testB.testB();
    }
}

코드의 실행

위의 코드로 다시 바꾸어서 실행했을 때, TestA Class가 생성될 때 불러오는 생성자가 언제 만들어지는 것인지 알 수 있다.

상속을 알기 위해서는 생성자를 먼저 알고 있으면 좋다.

 

생성자는 Class 생성시 반드시 존재해야 하지만, 너무나도 당연하게 있다시피해서 생략이 되는 기능 중 하나이다.

생략이 된다는 의미는 필요 없다는 것이 아닌, Class의 생성을 빠르게 하기 위해서 생성자가 없어도 Java가 알아서 생성자가 있다고 생각 시킨다에 가깝다.

 

마찬가지로 상속하게 되면 super(); 라는 메서드가 생성되는데 이 또한 너무나도 당연하여 생략되는 기능 중 하나이다.

상속받는 대상의 생성자가 실행되었을 때, 제일 먼저 super(); 함수가 실행 되는 것을 반드시 알고 있어야 한다.

 

super()

super의 실행

super()는 this()메서드가 같은 클래스의 다른 생성자를 호출한다면, super()는 부모 클래스의 생성자를 호출할 때 이용한다.

 

이를 활용한다면, this가 자기자신의 변수와 메서드를 불러오듯이 super는 부모클래스의 변수와 메서드를 불러올 때 이용된다.

 

 

 

반응형

댓글

Designed by JB FACTORY