ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 상속에서 클래스 생성과 super
    JAVA 2020. 6. 23. 23:47

     

    상속에서 클래스 생성과 super


    안녕하세요? 장장스입니다.

    오늘은 객체지향 프로그래밍의 중요한 특징 중 하나인 상속(inheritance)에 대해 포스팅 해보겠습니다.

     

     

    클래스의 상속


    B 클래스가 A 클래스에게 상속받는다고 하면 다음과 같이 나타낼 수 있습니다.

     

    클래스 간 상속을 표현할 때 하위 클래스가 상위 클래스를 바라본다는 느낌으로 화살표가 하위클래스에서 상위 클래스로 표시됩니다.

    상위 클래스는 부모 클래스, 하위 클래스는 자식 클래스 라고도 불립니다.

    자바에서 상속은 extends 예약어를 사용합니다.

    class B extends A{
    }

     

    하위 클래스가 생성되는 과정


    그렇다면 하위 클래스는 어떻게 상위 클래스를 상속을 받을까요. 

    우리는 상속을 받는 하위 클래스가 생성되는 과정을 살펴 볼 필요가 있습니다.

    다음과 같이 Customer 클래스를 생성했습니다. 디폴트 생성자에 sysout을 넣었습니다.

    public class Customer {
    	protected int id;
    	protected String name;
    	
    	public Customer() {				
    		System.out.println("상위 클래스 생성자 호출");
    	}
    
    }

    이제 Customer 클래스를 상속 받는 VIPCustomer 클래스를 만들고 똑같이 디폴트 생성자에 sysout을 넣었습니다.

    public class VIPCustomer extends Customer {
    
        private String vipLevel;
    
        public VIPCustomer() {
    	  System.out.println("하위 클래스 생성자 호출");
        }
    }
    

     그리고 테스트를 위해 또 다른 클래스 파일에 VIPCutomer 인스턴스를 생성해 실행시켜보았습니다.

    public class TestClass {
    
      public static void main(String[] args) {
    		
    	VIPCustomer vip = new VIPCustomer();
    	}
    }

    실행시켜 볼까요?

    짜잔

    분명 VIP 클래스만 호출했는데 상위 클래스에 써넣은 문구가 같이 출력됬습니다. 정확하게는 먼저 출력이 됬습니다.

    이처럼 하위 클래스가 생성될때는 먼저 상위 클래스가 생성이 된다는 것을 확인 할 수 있습니다.

     

     

    상위 클래스 호출 super()


    아니.. 아무것도 없는데 어떻게 상위 클래스를 호출하는 걸까요? 그건 바로 super 예약어가 호출 되었기 때문입니다. 

    우리가 디폴트 생성자를 쓰지 않아도 생성자가 기본으로 생성되는 것과 똑같다고 생각하면 쉽습니다!

    VIPCustomer 클래스에 생성자는 실제로 아래 코드처럼 super(); 를 가장 먼저 호출하게 됩니다.

    public class VIPCustomer extends Customer {
    
    	private String vipLevel;
    
    	public VIPCustomer() {
    		super();
    		System.out.println("하위 클래스 생성자 호출");
    	}
    }

     

    super 예약어는 하위 클래스에서 상위 클래스로 접근할 때 사용합니다. 하위 클래스는 상위 클래스의 주소(참조값)을 알고 있습니다. 이 주소를 가지고 있는게 바로 super 입니다!

    super는 상위 클래스 생성자를 호출할 때도 쓰입니다!

     


    잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)

     

    댓글