명시적 형변환
class Parent{
int su = 10;
void pr(){
System.out.println(su);
}
void mp(){
System.out.println("Parent");
}
}
class Child1 extends Parent{
int su = 20;
void pr(){
System.out.println(su);
}
void mc(){
System.out.println("Child1");
}
}
public class CastingTest {
public static void main(String[] args) {
Parent p1 = new Parent();
System.out.println(p1.su);
p1.pr();
p1.mp();
// Child1 c1 = (Child1)p1;
// p1 원래 Parent, child1으로 형변환 불가능하다.
// 자동형변환 : Parent 타입 p1,p2 통일
// p1.mc();
// child1 객체 메모리 자체에 없다.
Parent p2 = new Child1();
System.out.println(p2.su); // 10
p2.pr();
p2.mp();
Child1 c2 = (Child1)p2;
// 명시적 형변환 ; 통일 사용중에 임시적 Child1 포함 변환
System.out.println(c2.su); // 20
System.out.println(((Child1)p2).su); // 20
c2.mc();
((Child1)p2).mc(); // c2.mc()와 같다.
//p2.mc(); Child1 객체 메모리 접근이 안된다.(오버라이딩 메소드만 가능)
Child1 p3 = new Child1();
p3.pr();
p3.mp();
p3.mc();
}
}