요즘 9시 기상을 목표로 하루를 알차게 보내려고 노력 중인데 금요일이라 일찍 끝난 것도 있었고 놀다보니 마음을 다잡기가 어려워서 이제야 공부를 시작한다.. 사실 지금도 당장 방으로 올라가고 싶지만 우선은 이 정리부터 끝내야지
내 마음 다잡기가 이리도 힘들다 그래도 할 건 해야지 나태해지지 말자 안주하지 말자! 아자아자!
1/12 섹션9 상속 필기
- 상속 키워드 - extends ex) public class ElectricCar extends Car {}
- 상속을 누구에게서 받을지는 하나만 선택할 수 있다.
부모 클래스 (슈퍼 클래스)
자식 클래스 (서브 클래스)
- 상속 구조도에서 방향은 자식에서 부모 쪽으로
- 자식 클래스에서 누구로부터 상속 받을 것인지를 표시한다. 이 의미는 자식 클래스가 부모 클래스를 안다는 것이다.
- 자바에서는 클래스에서 다중 상속을 지원하지 않는다.
- 물려받은 기능 중 겹칠 때 어디 것을 쓸 건지가 애매해 진다. -- 다이아몬드 문제
- 클래스 계층 구조가 매우 복잡해질 수 있다. - 대신, 인터페이스의 다중 구현은 허용한다.
상속과 메모리 구조
이 내용은 뇌에 새겨야 한다 무조건! 이해하고 넘어가자!
상속 관계를 사용하면 부모 클래스도 함께 포함해서 인스턴스가 생성된다.
외부에서 볼 때 하나의 인스턴스를 생성하는 것 같지만 내부에서는 부모와 자식이 모두 생성되고 공간도 구분된다.
호출하는 변수의 타입(클래스)을 기준으로 부모와 자식 중 하나를 선택한다. 상속 관계에서는 자식 타입에 해당하는 기능이 없으면 부모로 올라가서 찾는다. 부모에서도 해당 기능을 찾지 못하면 상위 부모에서 필요한 기능을 찾아보고 올라가면서 필드나 메서드를 발견하지 못하면 컴파일 오류가 발생한다.
- extends => 부모의 기능을 받아 새로운 기능을 추가해서 확장한다, 확장해서 새로운 개념을 만든다.
상속과 메서드 오버라이딩
- 메서드 오버라이딩: 부모에게서 상속 받은 기능을 자식이 재정의한다.
- 하위 클래스에서 상위 클래스의 메서드를 재정의하는 과정
- 메서드 오버라이딩, 메서드 재정의 - @이 붙은 부분은 애노테이션(annotation; 주석), 주석과 비슷한데 프로그램이 읽을 수 있는 특별한 주석
- @Override 상위 클래스의 메서드를 오버 라이드 했다고 표시한다.
- 오버라이드가 정확하게 안 되면 컴파일 오류를 낸다.
** 기본적인 주의 사항
1. 메서드 이름을 같아야 한다.
2. 매개변수 타입, 개수, 순서가 같아야 한다.
3. 반환타입이 같아야 한다.
cf. 메서드 오버로딩에서도 매개변수 타입 순서가 다르면 다른 걸로 인정된다.
- 메서드 이름은 일치하되 매개변수의 개수, 타입이 달라야 한다. 메서드의 return 타입이 달라야 한다.
- 부모의 필드명과 자식의 필드명이 같거나 메서드도 오버라이딩 되어 있으면 부모 클래스의 것이 호출되지 않는다.
- => 이럴 때 super 키워드를 사용한다.
- 자기 자신부터 찾고, 없으면 부모 클래스 가서 찾아본다.
cf. this는 자기 자신의 참조를 의미한다.
super - 생성자
상속 관계의 인스턴스를 생성하면 메모리에 자식, 부모 클래스 모두 만들어진다. -- 각각의 생성자를 모두 호출
상속 관계를 사용하면 자식 클래스의 생성자 첫 줄에 부모 클래스의 생성자를 반드시 호출해야 한다. super(~)
- 기본 생성자(파라미터가 없는 생성자)면 생략 가능하다.
- 생성자의 실행 순서는 최상위 부모부터 하나씩 아래로 내려온다. 최상위 부모부터 초기화가 이루어진다.
- -- 부모의 기능을 상속받아 사용하니 먼저 만들어져야 한다.
자식 클래스의 생성자 첫 줄에 this() 또는 super()를 사용한다.
this()를 백번 하더라도 마지막에 가서 super()를 사용해야 한다.
꿀팁!
- ctrl O 오버라이드 할 것을 골라 자동으로 작성해 준다.
정리하면,
- 변수가 private이면 super.을 해도 접근이 제한된다.
- 클래스에 final이 붙으면 상속이 불가능하다.
- 메서드에 final이 붙으면 오버라이드가 불가능하다.
--끝--
'inflearn' 카테고리의 다른 글
[인프런] 김영한의 자바 기본 강의 섹션11. 다형성2 (240115) (0) | 2024.01.15 |
---|---|
[인프런] 김영한의 자바 기본 강의 섹션10. 다형성1 (240113) (1) | 2024.01.14 |
[인프런] 김영한의 자바 기본 강의 섹션8. final (240111) (1) | 2024.01.11 |
[인프런] 김영한의 자바 기본 강의 섹션7. 자바 메모리 구조와 static (240111) (0) | 2024.01.11 |
[인프런] 김영한의 자바 기본 강의 섹션6. 접근 제어자 (240109) (2) | 2024.01.10 |