Programming/JAVA
형변환(메모)
gyu0
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 연산자 배운다는 걸 암시한다.
업캐스팅이랑 다운캐스팅은 별로 내용은 없어서 나만 알아볼 수 있게 메모형식으로 적었다.