-
형변환(메모)Programming/JAVA 2020. 6. 16. 01:23
형변환
-일단은 업캐스팅시 형변환 생략.
-다운캐스팅시 형변환 입력해주어야함.
//이거 외우면 일단 반 먹고 들어간거야.
참조변수와 참조변수가 가리키고 있는 인스턴스랑은 전혀 다른 개념이라는 거 명심해둘것.
가리키는 인스턴스가 같아도 참조형 변수타입이 조상클래스타입이면 자손클래스 멤버들을 못쓰고
참조형 변수 타입이 자손클래스이며 가리키는것도 자손클래스이면 그 멤버들을 다 쓸 수 있다.
참조형변수에 인스턴스 생성시 참조형 변수가 인스턴스와 비교했을 때 쓸 수 있는 것 보다 같거나 적어야한다.
우리는 무작정 그냥 형태만 외우고 객체생성만 해온거다
ex) 주석 확인
public class test { public static void main(String[] args) { test2 t2 = new test2(); t2.test21(); //test3 t3 = new test2(); << 이게안된다는거 } } class test3 extends test2{ String test31() { return "say"; } } class test2{ String test21(){ return "hi"; } }
public class castingtest1 { public static void main(String[] args) { car c=null; fireEngine fe=new fireEngine(); fe.water(); c=fe;// c.drive(); //c.water(); //업캐스팅 fe는 자손 클래스 c는 조상클래스 //c.water(); 근데 이거는 car타입의 참조변수로는 호출할 수 없어 //왜냐면 fe안에 c가 있는거고 fe는 c로 형변환을 했으니 갯수도 당연히 c의 멤버개수로 줄었을거. //참조변수 형이 달라서 인스턴스를 가리키는 건 똑같은데 참조변수 형때문에 못쓰는중이야 fireEngine fe2=new fireEngine(); fe2=(fireEngine) c; fe2.water();//다운캐스팅이니까 쓸 수 었어. fe2.drive(); fe2.stop(); } } class car{ String color; int door; void drive() { System.out.println("drive, brrrrrr..."); } void stop() { System.out.println("stop!"); } } final class fireEngine extends car{ void water() { System.out.println("water!"); } }
읽는다고 열장짜리 읽었는데 마지막 문장이 요약을 끝냈다.
전에 배운거처럼 조상타입의 인스턴스를 자손타입의 참조변수로 참조하는 것은 허용되지 않는다.
서로 상속관계에 있는 타입간의 형변환은 양방향으로 자유롭게 수행될 수 있으나, 참조변수가 가리키는 인스턴스의 자손타입으로 형변환은 허용되지 않는다.
그래서 참조변수가 가리키는 인스턴스의 타입이 무엇인지 확인하는 것이 중요하다.
ㄴ이건 다음에서 instanceof 연산자 배운다는 걸 암시한다.
업캐스팅이랑 다운캐스팅은 별로 내용은 없어서 나만 알아볼 수 있게 메모형식으로 적었다.
'Programming > JAVA' 카테고리의 다른 글
abstract include interface(2) (0) 2020.06.28 abstract include interface (0) 2020.06.27 제어자 (0) 2020.06.13 super (0) 2020.06.12 오버라이딩(overriding) (0) 2020.06.09