0707 | 객체의 상속관계 is a
✅ 조상을 이어받는 상속관계
🟩 is a 상속 |
: 조립, 결합 과정이 아닌, 틀(frame)과 틀에서 찍어낸 관계. ▶ framework
: 재사용할때 <틀>이 있는지를 보고 (프레임워크 라이브러리 확인), 없으면 <부품>을 가져다가 만든다.

🟩 확장 클래스의 객체와 참조형식 |
: 부모를 가지는 클래스는 두개의 객체를 생성한다

👉 오버라이드 된 자식클래스는 평소 자신의 인스턴스를 지칭하는 this와 조상을 호출하는 super를 가지고 있다.
super = 상속받은 객체만 지명할 수 있는 이름 |
▼ 내가 필요한 형태로 가공
🟩 is a 관계의 특징 ▶ 고쳐쓴다 ▶ 메소드재정의 (override)
: 자식클래스가 구현될때 부모형태를 일부 가져다가 구현. 그때 부모의 부분을 따로 명칭하기 위해 super라는 지시어를 쓴다
(*생성자를 호출할때는 해당 형식의 + (괄호) + 갓 생성된 + 사용된적이 없어야 한다)
public class NewExam extends Exam{
Exam exam = new NewExam(); // NewExam()안에 Exam()객체가 있으므로 참조할 수 있다
NewExam exam1= (NewExam) new Exam();
}
▼ 내가 필요한 형태로 가공
백날 정리하는거보다 강의한번 더 듣는게 이해가 잘 간다 ▼
🟩 참조형식과 호출되는 메소드의 관계 (*자바는 참조형식이 아닌 객체형식의 함수를 우선호출한다)
▲ Exam타입에는 국영수만 있으니 생성자로 3이 출력되어야 할것같은데,4가 나온다...?
👉 자바는 참조형식이 중요하지 않다. 참조형식의 함수보다 객체 형식에 있는 함수를 호출한다.
(* 단 참조형식이 가지고 있는 함수내에서만 가능)
👉 객체가 우선순위를 갖고 해당 메서드가 있는지 확인하고, 없으면 부모 메서드를 호출한다.
부모메서드 안에서도 연결된 함수로 넘어가기전에 객체가 해당 함수를 갖고있는지 확인해서 그 함수를 호출한다.
따라서 단순히 부모가 가진걸 고쳐쓰는게 아니라 흐름이 바뀐다.
부모의 코드를 이어가는 와중에 내 코드를 거쳐서 가게 되는 상황. (내 코드를 꽂아넣게 됨)
다형성 정리본 ▼
1011 | 자바의 정석 기초편 :: ch7-21~7-23
접근제어자 (access modifier) ✔ 접근제어자 : 4개중 한개만 사용 가능 public 접근제한이 전혀없다 private 같은 클래스 내에서만 접근 가능 (default) 같은 패키지 내에서만 접근 가능 protected 같은 패키지
ala-nueva.tistory.com
1012 | 자바의 정석 기초편 :: ch7-24~7-28
참조변수의 형변환 ✔ 참조변수의 형변환 : 사용할 수 있는 멤버의 갯수를 조절하는 것. 그 외에는 아무것도 변하지 않는다. ex) 기본형의 형변환은 값이 바뀐다. 그러나 참조변수는 멤버 개수만
ala-nueva.tistory.com
🟩 메소드 동적 바인딩 (함수 호출 위치 결정 방식 이해하기)
: 함수가 있는 쪽으로 점프한다 = 바인딩한다
상속 받았을때 자식 객체 하나가 만들어지고 그 안에 부모의 영역이 있다.
함수는 공간이 아니라서 고정된 자리에 존재한다.
따라서 호출되는 다음 함수의 위치를 알아내는 작업을 해야한다
정적바인딩 - 컴파일시점에 번역기가 바인딩을 결정. 형식에 따라 가야 할 메서드가 고정된다.
동적바인딩 - 번역기가 바인딩을 정하지 않는다 (실행 중에 호출 될 때 전달된 객체에 따라서 결정된다)
자바에서 정적 바인딩(Static Binding)은 컴파일 시간에 수행되는 바인딩 방식입니다. 정적 바인딩은 메서드 호출이나 변수 참조 시에 어떤 메서드나 변수가 실제로 호출 또는 참조될지를 컴파일 시점에서 결정하는 것을 의미합니다. 정적 바인딩은 다음과 같은 특징을 가지고 있습니다:
반면에 동적 바인딩(Dynamic Binding)은 실행 시간에 실제 객체의 타입에 따라 메서드가 동적으로 결정되는 바인딩 방식입니다. 동적 바인딩은 다형성을 지원하며, 메서드 오버라이딩과 같은 동적인 특성을 가능하게 합니다. |