class A{
A(){
System.out.println("A");
}
void dcinside(){
System.out.println("나는 엠창인생 디시인입니다.");
}
}
class B extends A{
B(){
System.out.println("B");
}
void dcinside(){
System.out.println("나는 개병신 디시충입니다.");
}
}
public class Inheritance {
public static void main(String [] args){
B b = new B();
A a=(A)b;
a.dcinside();
A aa= new B();
aa.dcinside();
}
}
/* 실행결과 :
A
B
나는 개병신 디시충입니다.
A
B
나는 개병신 디시충입니다.
*/
그러니깐 코드는 위랑 같고 대충 설명을 해보면 class B가 A를 상속하거덩요. 그리고 dcinside라는 메소드를 오버라이딩 하고 있고.
근데 문제는 class B에 속한 객체 b를 만들고 이걸 class A로 형변환한 뒤 dcinside를 불러주면 (내 생각에는) class A의 메소드 dcinside가 작동되어야 할텐데 실제로는 class B의 메소드가 작동되더라고요.
왜 그런지 궁금합니다.
정확히는 모르겠는데 강제로 형변환 한다는거 자체가 메모리에 상주되어 있는 구조 자체를 바꾸는게 아니라 타입만 바꿔서 그런거 아닌가?
그러니까 객체 생성하면서 B로 이미 데이터가 메모리에 올라갔는데 강제로 형변환 한다고 A형식으로 바뀌지는 않을꺼 같은데
class A{ string a = "나는 엠창인생 디시인입니다."; A(){ System.out.println("A"); } void dcinside(){ System.out.println(a); } }
이런 형태로 하면 되지 않을까? 해보지는 않음