| 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 | 
