10-1. 클래스의 상속
- 생성자는 상속 받지 않는다.
- 부모에게 상속 화살표를 향한다.
- 가장 중요한 장점은 다형적 표현이 가능하다는 것이다. ★ ★ ★
- 학생은 사람이다. 그러나 사람은 학생이다 (x) 불가능하다.
- A의 모든 기능은 C가 가능하다. (화살표 방향으로 읽으면 모두 성립한다.) (화살표를 거스른다면 불가능하다.)
- 다형적 표현은 하나의 객체를 두고 여러 의미로 부를 수 있는 것이 다형적 이다.
- 배열의 2가지 특징 1) 동일한 타입만 저장 2) 크기 고정
- 상속은 상위 클래스인 부모클래스를 정의해서 나머지 하위 자식들을 포함하자.
- 부모 클래스를 정의하면 하위 클래스를 관리할 수 있다. (객체를 관리하기 편해진다.)
- 상속 = 다형적
- 다중 상속을 받으면, 모호성이 생기기 때문에 발생하지 않도록 불가한다.
- 자식 클래스는 여러 개 가능하나, 부모클래스가 다중은 안됀다는 것
- student 필드에서 3개, 메서드 3개 사용할 수 있다. (상속 받았기 때문에)
- 메모리 구조 중요 ★ ★ ★
- B b = new B(); 에서 부모가 있는 경우 부모 객체가 먼저 만들어진다. (B() 는 객체 의미)
- 생성자를 상속하게 되면 생성과 동시에 오류이다.
- 화살표의 방향을 이해하자.
- 코드를 보고 UML 형식을 만들 수 있어야한다.
10-2. 객체의 타입변환
- 자식에서 부모로 가는 것을 업캐스팅, 부모에서 자식으로 가는 것이 다운캐스팅
- 업캐스팅은 항상 가능 (기억)
- 항상 = 를 중심으로 왼쪽과 오른쪽이 타입이 같아야 한다! (컴파일러로 인해 자동으로 캐스팅이 됐을 뿐이다.)
- 다운캐스팅은 언제 가능하고 언제 불가능할까?
- 다운캐스팅은 컴파일러가 자동으로 절대 해주지 않는다.
- 첫 번째 메모리 그림을 잘 이해하기 (a가 가리키는 것은 A객체이다.)
- B b = new B()와 A a = new B()의 차이점과 A a = new A()와 A a = new B()의 차이점을 잘 이해하기
- instanceof는 캐스팅이 가능한지 불가능한지 알려주는 문법이다.
10-3. 메서드 오버라이딩 (Overriding)
- void (리턴타입) / abc (int, int ) (시그너처) 의미한다.
- 오버라이딩을 통해 배열로 한번에 관리 가능하며, 코드가 간결하고 다형적 표현이 가능하다.
- 오버라이딩은 상속했을 때 내용이고, 오버로딩은 동일한 메서드 이름에서 시그너처가 달라 같은 공간에 있을 수 있는 것이다.
10-4. 필드와 static 멤버 (필드_메서드)의 중복
- 오버라이딩의 정식 명칭은 '메서드 오버라이딩'이다. => 인스턴스 메서드의 오버라이딩이다.
- 인스턴스 필드와 static (필드/메서드)의 중복이 됐을 때 어떻게 될까? 에 대한 내용
- B 객체 안에 m = 3, m=4 가 같이 만들어지는데, 인스턴스필드가 중복이 된다. => 오버라이딩이 되나?
- 이때는 공간상 분리가 되어있기 때문에 오버라이딩이 일어나지 않고 각각의 공간에 m이 존재하는 형태로 있다.
- 오버라이딩 되는 조건은 메모리 상에 같은 공간에 있어서 덮어쓰기가 돼냐 아니면 다른 공간에 있어 덮어쓰기가 안돼냐를 구분할 수 있으면 되는 것이다.
- 스태틱 영역에 또한 공간이 분리되어있기 때문에 오버라이딩이 되지 않는다.
<정리>
- instance 메서드는 오버라이딩이 되기때문에 기준이 B() 를 보면 되는 것이다.
10-5. super와 super()
- super 키워드는 this 키워드 & super()는 this()와 비슷하다고 생각하면 된다.
- this는 자신의 객체 의미했었다.
- 주의해야할게, 덮어쓰기라고 했지만 덮어쓰기가 아니라 부모메서드 위에 올라탄 것. (부모 것을 없애는 것이 아님)
- 부모의 것을 호출하려고 할 때 super 사용
- super.init을 작성하면 위의 100줄 코드를 작성하지 않고도 한줄만 코드를 추가하면 2줄코드로도 끝낼 수 있다.
- this() 메서드는 자신의 생성자를 호출하는 것이므로 super()는 부모 생성자를 호출하는 것이다.
- 생성자 첫줄에서만 super 사용가능 => this ()도 동일한 특징 => 즉, this와 super 메서드 동시에 불가능
- 자식 class 안에는 생성자의 첫줄에는 반드시 this() 또는 super()가 존재!
- super와 super()을 공부할 때는 this와 this()를 연계하여 같이 공부하자!
10-6. 최상위 클래스 Object
- 상속을 작성하지 않은 경우 Object를 자동으로 상속받게 된다.
- 자바의 클래스는 모두 object의 자식이다. (몇단개의 자식인가에만 차이)
- 내용비교를 하기 위해서는 equals를 재정의해야한다.
- hash 자료구조
- hashmap은 쌍으로 기억하는 데이터를 말함
- hashmap은 key가 중복될수 없으므로 1 안녕이 1 땡큐로 바뀐다.
- hashcode는 동등비교에서 사용된다.
- 해쉬코드는 오브젝트의 해쉬코드는 위치기반으로 고유값을 만들기 때문에 위치가 다르면 서로 다른 해쉬코드가 나온다.
- 즉, 같은 해쉬코드를 오버라이딩 해서 같은 데이터로 만들어야한다.
https://www.youtube.com/@doit4312/playlists
Do it 자바 완전 정복 동영상 강의
Do it 자바 완전 정복 동영상 강의입니다.
www.youtube.com
위 강의를 듣고 작성하였습니다.
'Backend > Do it 자바 완전 정복 강의' 카테고리의 다른 글
12장 추상 클래스와 인터페이스 (0) | 2025.02.26 |
---|---|
11장 자바 제어자 - final, abstract (2) | 2025.01.20 |
09장 자바 제어자 - 접근 지정자와 static (0) | 2025.01.17 |
08장 클래스 외부 구성 요소 (0) | 2025.01.17 |
07장 클래스 내부 구성 요소 (0) | 2025.01.17 |