class Parent {
String msg = "Parent 클래스";
public String getMsg() {return msg;}
}
class Child extends Parent {
String msg = "Child 클래스";
public String getMsg(){return msg;}
}
public class OverridingEx {
public static void main(String[] args)
{
// TODO Auto-generated method stub
Child cd = new Child();
System.out.println("cd : " + cd.getMsg());
Parent pt = new Child();
System.out.println("pt : " + pt.getMsg());
Parent ct = new Parent();
System.out.println("ct : " + ct.getMsg());
}
} |
결과는 cpp에서 하던 것과는 좀 다르게
Child() 객체를 Parent의 형으로 변환해주어도 실제 객체는 Parent로 인식하는 것이 아닌 Child로 인식을 한다.
cd : Child 클래스
pt : Child 클래스
ct : Parent 클래스
|
이는 자바의 동적 바인딩(Dynamic binding)으로 인해
객체의 원형을 추적하여 원래 연결되어야 할 메소드를 호출하기 때문이다.
객체의 원형을 추적하여 원래 연결되어야 할 메소드를 호출하기 때문이다.
[링크 : http://slsjyh.blog.me/30111917680]
+
기억이 잘 나지 않아 vs2008/cpp g++/cpp로 포팅 후 돌려보았는데
결과가 다르게 나왔다. 아무래도 타입에 따라서 형을 추적하는 수준에는 자바와 cpp에는 차이가 있어 보인다.
#include < iostream > #include < string > using namespace std; string pmsg = "Parent 클래스"; string cmsg = "Child 클래스"; class Parent { public: string getMsg() {return pmsg;} }; class Child:Parent { public: string getMsg() {return cmsg;} }; class OverridingEx { public: static void main() { // TODO Auto-generated method stub Child *cd = new Child(); cout << "cd : " + cd->getMsg() << endl; //Child *t = new Child(); //Parent *pt = (Parent *)t; Parent *pt = (Parent *)(new Child()); cout << "pt : " + pt->getMsg() << endl; Parent *ct = new Parent(); cout << "ct : " + ct->getMsg() << endl; } } ; int main(int argc, char **argv) { OverridingEx ex;// = new OverridingEx(); ex.main(); return 0; }
cd : Child 클래스
pt : Parent 클래스
ct : Parent 클래스 |
java와 같이 제대로 동적 바인딩을 통해 실행을 할 수 있다.
+class Parent {
public:
virtual string getMsg() {return pmsg;}
};
class Child:Parent {
public:
virtual string getMsg() {return cmsg;}
}; |
cd : Child 클래스
pt : Child 클래스
ct : Parent 클래스 |
2013.03.14 추가
동적 바인딩은 인스턴스 변수와 스태틱 메소드에 대해서는 적용되지 않는다.
[링크 : http://haneulnoon.tistory.com/90]
'Programming > Java' 카테고리의 다른 글
java private constructor (0) | 2014.03.14 |
---|---|
java abstract / interface & cpp virtual (0) | 2014.03.14 |
Java for문 내 변수는 매번 초기화 된다. (0) | 2014.03.13 |
Java array (0) | 2014.03.13 |
java string.intern() (0) | 2014.03.12 |