トップページ > コンテンツ > プログラミング入門 > Java入門 > スコープに関する話 > 静的結合と動的結合

オブジェクト参照変数とオブジェクトの型でも述べたように
オブジェクト参照変数にはオブジェクトそのものが入っているわけではない。

オブジェクト参照変数の型とオブジェクトの型が異なる場合だが、
ここでスーパークラス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