[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