| 1. Basics | 클래스, 객체, 변수, 메서드 // 생성자, 초기화 |
| 2. Advanced | 상속, 오버라이딩 // package, import, modifiers, 클래스 타입의 형변환, 다형성 // 추상클래스, interface, 내부클래스 // '다형성' 내용 안에 '클래스 타입의 형변환' 내용이 있다. |
| 5. 클래스 타입의 형변환 | 1. 참조 변수와 객체의 타입 관계 2. 참조변수의 형변환 3. instanceof 연산자 4. 참조형 매개변수와 객체의 타입의 관계 |
와 이 파일만 이름 형식 다르게 해놓아서 공부 안 할 뻔,,, 휴..! 24.6.18 Cp1 Final exam D-1
5.1. 참조 변수와 객체의 타입 관계
- 참조 변수의 타입
-한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함
-상위 클래스 타입의 참조변수로 하위 클래스의 객체를 참조할 수 있음
-상황: 상위 class Tv, 하위 class CaptionTv
Tv t1 = new CaptionTv(); // 'CaptionTv 객체를 그냥 Tv로 다루겠다'는 의미
(CaptionTv t3 = new Tv(); -> X)

- 하위 클래스 객체를 상위 클래스 타입 변수에 지정하면(Tv t1 = new CaptionTv();)
-타입은 문제 없지만
-이후 t1.caption() 등 하위 클래스 고유의 행위는 t1을 통해서 불가능 - 하위타입의 클래스 변수로 상위타입의 인스턴스 참조 불가
CaptionTv c = new Tv(); //Error
-컴파일러가 오류를 안 내면,
c.text = 'Hello!'도 오류가 없음
c는 CaptionTv 타입 변수고
text는 CaptionTv에 존재하는 변수이므로
but
c가 가리키는 객체는 원래 Tv 객체(text, caption() 없음)
*컴파일러에서 넘어가면, 나중에 런타임 에러 발생 소지 있음
5.2 참조변수의 형변환
- 하위 클래스 객체를 상위 클래스 타입 변수에 지정하면 억울함
Tv t = new CaptionTv();
-타입은 문제 없지만
-text, caption()을 보유하는 객체임에도 t.text;, t.caption(); 불가 - 억울함 해결방법 - 형변환
Tv t = new CaptionTv();
Caption Tv c3 = (CaptionTv) t;
-int 같은 기본 타입처럼 형변환 가능
-단, 상위 클래스 <-> 하위 클래스 일 때만
*업캐스팅: 하위 -> 상위타입 : 형변환 생략가능
*다운캐스팅: 상위 -> 하위타입: 형변환 생략불가 - 예제코드

5.3 instanceof 연산자
- 형변환의 문제
-참조변수가 참조하는 인스턴스의 실제 타입을 모르고 형변환을 해도 일단 허락한다

- instanceof 연산자
목적-참조변수가 참조하는 인스턴스의 실제 타입을 알아보기 위해 사용
형태-참조변수 instanceof 클래스명(타입)
연산결과-T/F
*연산결과가 T면, 인스턴스가 해당 타입이므로 형변환이 안전

5.4 참조형 매개변수와 객체 타입의 관계
- 참조형 매개변수
참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 하위 타입의 인스턴스를 넘겨줄 수 있다

'CSE > CP1 이론' 카테고리의 다른 글
| CP1_05.배열3_다차원 배열 (0) | 2024.06.17 |
|---|---|
| CP1_07.객체지향 프로그래밍_Advanced_내부 클래스 (0) | 2024.06.17 |
| CP1_07.객체지향 프로그래밍_Advanced_파일과 예외처리 (0) | 2024.06.17 |
| CP1_07.객체지향 프로그래밍_Advanced_2.오버라이딩 (0) | 2024.06.11 |
| CP1_07. 객체지향프로그래밍_Advanced_1. 계승 (0) | 2024.06.11 |