KoreaIt Academy/JAVA

10. JAVA의 상속(Inheritance), 오버라이딩(Overriding)

hongeeii 2021. 7. 18.
728x90
반응형

자바에는 상속(Inheritance)이라는 개념이 존재합니다.

쉽게 말해 부모 클래스(상위 클래스)와 자식 클래스(하위 클래스)가 있으며, 자식 클래스는 부모 클래스를 선택해서, 그 부모의 멤버를 상속받아 그대로 쓸 수 있게 됩니다.

 


상속을 사용하는 이유

1. 기존에 선언된 클래스의 필드를 새롭게 만들 클래스의 필드로 사용하고자 할 때
2. 여러 클래스 선언 시 필드가 겹치는 경우, 부모 클래스를 먼저 선언하고
   공통 필드를 묶어서 자식 클래스들에게 상속해준다.

 

클래스 상속 문법

 

부모클래스 A는 필드로 data 와 printData()를 가지고 있습니다.

부모클래스를 상속하는 방법은 extends [부모클래스명]  으로 작성하면 됩니다.

위의 코드에서 B클래스는 A클래스를, C클래스는 B클래스를 상속 받았으므로,

C클래스는 A, B클래스의 필드를 모두 사용 할 수 있습니다.

 

메소드 오버라이딩

부모 필드에서 선언한 메소드를 자식 필드에서 수정하고자 할 때 재정의를 해야 합니다.

상속관계에서 하위 클래스의 메소드가 상위 클래스의 메소드와 같은 이름으로 선언될 때, 서브 클래스의 메소드는 상위 클래스의 메소드를 오버라이딩(Overriding)한다고 합니다.


부모 필드가 메모리에 먼저 할당되고 engineStart라는 메소드가 먼저 올라간다고 하면,
자식 필드가 메모리에 할당되면서 재정의한 engineStart 메소드가 새롭게 만들어지는 것이 아닌
기존에 할당된 engineStart 메소드 저장공간에 새롭게 재정의한 소스코드의 주소가 들어가게 됩니다.
따라서 자식 객체로 engineStart 메소드에 접근하면 자식 필드에서 재정의한 소스코드의 내용이 읽히게 됩니다.


super : 부모 생성자

자식 클래스 타입의 객체로 부모 필드에 접근할 수 있습니다.
하지만 자식 생성자만 호출하기 때문에, 자식 필드만 메모리에 할당된다고 생각할 수 있습니다.

사실 자식 생성자에는 항상 부모 생성자를 호출하기 때문에

자식 생성자 호출 시 부모와 자식 필드 모두 메모리에 할당됩니다.


이 때 부모 생성자를 호출하는 방법은 super()를 사용하는 것입니다.
만약, super()를 작성하지 않아도 컴파일러가 자동으로 작성해줍니다.

728x90
반응형

추천 글