My footsteps
참조변수의 형변환,instanceof,추상클래스 본문
- 참조변수의 형변환 : 사용할수있는 멤버의 갯수를 조절하는것(주소값,객체 변화 無) , 조상 자손관계의 참조변수는 형변환 가능하다
<예제 풀이>
1. Car car = null;
2. FireEngine fe = new FireEngine(); // 객체 생성하며 주소 자동 복사
3. FireEngine fe2 = null;
4. fe.water( );
5. car = fe;
(주석처리 되어있는 car.water는 에러. 왜냐하면 car의 calss값이 총 4개인데
fe의 class값은 총 5개이다. car가 쓸수있는 멤버가 4개뿐이 안되서 성립불가능)
(+ 그리고 위의 식은 사실 형변환이 생략된 상태이다. 원래대로면
car = (Car)fe; 가 맞는데 생략할수 있는 이유는
정의된 클래스값 사진을 보면 class FireEngine extends Car 즉, car가 fe의 조상이다.
자식이 조상으로 형변환 하는건 생략 가능이지만,
조상이 자식으로 형변환하는건 불가능 하다.
따라서, 윗식은 대입연산자의 법칙인 왼→오 로 인해 자식이 조상으로 형변환 한것이기 때문에
형변환을 생략했지만, 그 반대라면 불가능 하다는것)
자식(5멤버) → 조상(4멤버) : 감소하는건 안전함
조상(4멤버) → 자식(5멤버) : 증가하는건 불안전함
6. fe2 = (FireEngine)car;
7. fe2.water ();
- 참조변수들이 가리키는 실제객체가 중요하다
- instanceof 연산자 : 참조변수의 형변환 가능여부 확인에 사용. 가능하면 true로 반환해줌
Q. 참조변수의 형변환을 하는 이유?
A. 참조변수(리모컨)을 변경함으로써 사용할수있는 멤버의 갯수를 조절하기 위해
- 추상 클래스 : 미완성 설계도. 몸통이{ } 없는 미완성 매서드를 갖고 있는 클래스를 말함,클래스 앞에 abstract를 붙임,
미완성 설계도라서 인스턴스(=객체) 생성불가
- 클래스 안에 잇는게 매서드...
Unit [ ] group = new Marine( ), new Tank( ), new Dropship( ) 와,
Unit [ ] group = new Unit[3];
group[0] = new Marine( );
group[1] = new Tank( );
group[2] = new Dropship( );
은 동일하다.
- 추상화를 쓰는 이유 : 코드 변경에 유연하게 반응함
'예습 > 이론' 카테고리의 다른 글
예외 (0) | 2023.01.20 |
---|---|
내부클래스,익명클래스,예외처리,try-chtch문 (0) | 2023.01.19 |
단일 상속,오버라이딩,패키지,import문,제어자,final,접근제어자,다형성 (0) | 2023.01.05 |
기본형 매개변수, static과 인스턴스 매서드,생성자,상속 (0) | 2023.01.04 |
객체 (0) | 2023.01.03 |