백엔드 개발자
2024. 3. 16. 16:46
상속이 필요한 상황
- 얄코 치킨이라는 클래스가 있음.
- 여기에 드라이브 스루기능을 추가하고 싶음.
- 새로운 클래스 (얄코치킨DT)를 만들고, 거기에 얄코치킨 기능과 드라이브 스루기능을 추가하는 방법도 있지만, 이러면 코드의 중복이 많아지고 얄코치킨과 얄코치킨DT 클래스간의 연관성이 프로그래밍적으로 전혀 드러나지 않게 된다.
기존의 어떤 클래스에 기능들을 추가해서 보다 구체적인 클래스를 만들때,
어떤 라이브러리로부터 상속을 받아 나만의 커스텀 클래스로 만들고 싶을때
상속을 사용하면 도움이 된다.
상속 예시
extends로 YalcoChicken 클래스를 상속받은 YalcoChickenDT 클래스
- takeHallOrder : 상속받은 얄코치킨 클래스의 메서드
- takeDTOrder : 상속클래스에서 새로구현한 메서드
- 얄코치킨 DT 인스턴스에서 상속받은 메서드와 새로 만든 메서드 둘다 사용이 가능하다.
- 필드 no, name은 protected를 사용해서 상속받은 자식클래스에서도 사용가능하도록 했음.
부모필드 접근제어자 protected -> private 변경해보기
- 💡 상속이 안 되는 것은 아님 - 자식클래스의 코드에서 사용하지 못할 뿐
- 상속받은 자손 클래스는 접근제어자만 막혀있지 않으면 부모클래스, 본인 클래스 내부 필드 및 메서드를 자유롭게 사용가능.
- 필드값의 경우 private로 막혀도 가지고는 있는다.
메서드 오버라이딩
오버라이딩의 정의
- 부모가 가진 메서드랑 같은이름으로 내용을 다르게 정의하는 것이다.
- 오버로딩 : 같은 이름의 메서드를 인자가 다른 여러 버전을 만드는 것.
- 오버라이딩 : 같은 이름의 메서드이지만 부모랑 자식 메서드간 내용이 다른것.
예시
super 부모의 생성자/메서드 호출
1. 부모 클래스에 생성자 작성시
- 부모 클래스에 생성자가 작성되었으면 자식클래스에서도 생성자 작성이 필요하다.
- 자식클래스 생성자는 반드시 super로 먼저 시작해야 한다.
- 이때의 super는 부모의 생성자를 가리킨다.
2. 부모의 메서드를 자식클래스에서 사용할 경우
- 메서드 안의 super는 부모 클래스의 인스턴스를 가리킨다.
- 위치나 순서는 상관없다.
@Override
- 부모의 메서드를 오버라이딩한다는 표시
- 메서드명이 잘못되면 에러를 보여주므로, 부모의 메서드를 오버라이딩할때 실수를 방지해주는 어노테이션
부모클래스에 명시된 생성자가 없는 경우
- 자식 클래스에서도 작성할 필요는 없다.
- 만약 부모클래스에 생성자가 있으면 자식클래스에서는 기본 super만 사용해서라도 있어야 한다.
출처
제대로 파는 자바 (Java) - by 얄코 강의 - 인프런
적당히 배워서는 살아남을 수 없는 시대. 자바, 한 번에 제대로 파서 마스터하세요!, 자바(Java), 생기초부터 활용까지 강의 하나로 한번에 끝! 🎓 대학교 이메일 계정이 있다면? 👉 얄코 강의
www.inflearn.com