class C1{
}

class C2 extends C1{
  void f(){
    System.out.println("f() is executed.");
  }
}

class Example{
  public static void main(String args[]){
    C1 obj = new C2();
    obj.f();
  }
}

上記のプログラムをコンパイルすると、
「メソッド f() はclass C1 で見つかりません。」
というメッセージが出てコンパイルエラーとなりました。

あるクラスの変数によってサブクラスのオブジェクトを参照する場合、
そのオブジェクトが呼び出すメソッドは、スーパークラスでも宣言されている
オーバーライドメソッドでなければならないということですか?