オブジェクト参照変数の型とオブジェクトの型が異なる場合だが、
ここでスーパークラスClassAとサブクラスClassBが次のようなインスタンス変数とメソッドを
持っていたとする。
Class A{
int x = 0;
void function(){return "A";}
static void fuction2(){return "A+";}
}
Class B extends A(){
int x = 1;
void function(){return "B";}
static void function2() {return "B+";}
}
そこで、
ClassA a = new ClassB();
System.out.println(a.x);
↑a.xはスーパークラスClassAのインスタンス変数(静的結合:コンパイル時にどの関数か決まる)
System.out.println(a.function());
↑a.function()はサブクラスClassBのメソッド(動的結合:実行中に動的に決まる)
System.out.println(a.function2());
↑a.function2()はstaticがついているため、スーパクラスClassAのメソッド
と書かれた場合には
0,B,A+が返されることになる。
最終更新:2012年08月13日 22:30