250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- JSON
- objecterror
- 테스트코드
- 참조변수
- fielderror
- 추상클래스
- 프록시
- 백준
- 싱글톤
- @configuration
- 다형성
- 의존관계
- 스프링
- 김영한
- 오블완
- html form
- 서블릿
- 스프링컨테이너
- ocp
- equals()
- 오버라이딩
- 티스토리챌린지
- HttpServletResponse
- java
- 코드트리조별과제
- 코딩테스트
- http 메시지 컨버터
- DI
- 코드트리
- 인터페이스
Archives
- Today
- Total
minOS
자바의 정석 ch7-24,25 참조변수의 형변환 본문
728x90
ch7-24 참조변수의 형변환
- 사용할 수 있는 멤버의 개수를 조절하는 것
- 조상 자손 관계의 참조변수는 서로 형변환 가능
class Car{ String color; int door; void drive(){ System.out.println("drive,brrr~"); } void stop(){ System.out.println("stop!!"); } } class FireEngine extends Car{ void water(){ System.out.println("water!!"); } } public class Main { public static void main(String[] args) { FireEngine f = new FireEngine(); Car c = (Car) f; //자손이 조상의 타입으로 형변환 가능 , 생략 가능 FireEngine f2 = (FireEngine) c; //조상이 자손의 타입으로 형변환 가능, 생략 불가능 c.drive(); f2.stop(); f2.water(); } }
출력
그림으로 표현Car 타입의 참조 변수 c는 water()메서드를 호출할 수 없다.
class Car{ String color; int door; void drive(){ System.out.println("drive,brrr~"); } void stop(){ System.out.println("stop!!"); } } class FireEngine extends Car { void water(){ System.out.println("water!!"); } } public class Main { public static void main(String[] args) { Car car = null; FireEngine fe = new FireEngine(); FireEngine fe2 = null; fe.water(); car = fe; // 자손이 조상으로 형변환 하는 것은 안전 ,형변환 생략가능 fe2 = (FireEngine) car; // 조상이 자손으로 형변환 하는 것은 위험, 생략 불가능 fe2.water(); } }
출력
!! 실제 인스턴스가 무엇인지 중요 !!
1) 실제 인스턴스가 null 일때class Car{ String color; int door; void drive(){ System.out.println("drive,brrr~"); } void stop(){ System.out.println("stop!!"); } } class FireEngine extends Car { void water(){ System.out.println("water!!"); } } public class Main { public static void main(String[] args) { Car car = null; FireEngine fe = null; car = fe; Car car2 = (FireEngine) car; car2.drive(); //NullPointerException 발생 } }
2) 실제 인스턴스가 조상이고, 자손으로 형변환한 경우class Car{ String color; int door; void drive(){ System.out.println("drive,brrr~"); } void stop(){ System.out.println("stop!!"); } } class FireEngine extends Car { void water(){ System.out.println("water!!"); } } public class Main { public static void main(String[] args) { Car car = new Car(); FireEngine fe = (FireEngine)car; // 형변환 실행 에러 java.lang.ClassCastException 발생 fe.drive(); //컴파일 ok. } }
실제 인스턴스 클래스의 멤버 개수가 형변환 대상 객체의 클래스 멤버 개수보다 작으면 안된다
728x90
'TIL > 남궁성의 자바의 정석' 카테고리의 다른 글
자바의 정석 ch7-27,28 매개변수 다형성 (0) | 2023.12.25 |
---|---|
자바의 정석 ch7-26 instanceof 연산자 (5) | 2023.12.21 |
자바의 정석 ch7-23 다형성 (0) | 2023.12.13 |
자바의 정석 ch7-22 캡슐화 (0) | 2023.12.13 |
자바의 정석 ch7-21 접근제어자 (0) | 2023.12.12 |