////////////////////////////////////////////////////////////////////////////////
//  << j244a.java >>
//
//  クラス(4):継承(オーバーライド、性質1)
//
//  Child objc = new Child();
//    Parent objp = objc;
//
//  (性質1) 変数objpから子クラスで新たに定義されたメンバ(フィールド、メソッド)
//             にアクセスすることはできない。
//
//  (1)子クラスのオブジェクトobjcの作成。
//  (2)子クラスのオブジェクトobjcを親クラスの変数objpに代入。
//  (3)親クラスで定義されたフィールド変数にアクセス可能。
//  (4)子クラスで新たに定義されたフィールド変数にアクセス不可能。
//  (5)親クラスで定義されたメソッドに呼び出し可能。
//  (6)子クラスで新たに定義されたメソッドに呼び出し不可能。
//
///////////////////////////////////////////////////////////////////////////////

class Parent {
  int pa = 111; // 親クラスのみのフィールド。
  void pm() {
    System.out.println("親クラスで定義されたメソッド(pm)");
  }
}

class Child extends Parent {
  int ca = 222; // 子クラスのみのフィールド。
  void cm() {
    System.out.println("子クラスで新たに定義されたメソッド(cm)");
  }
}

class j244a {
  public static void main(String args[]) {

    Child objc = new Child(); //(1)
    Parent objp = objc; //(2)

    System.out.println("(3)objp.pa = " + objp.pa); //(3)
    System.out.println("(4)objp.ca = " + "エラー");

    System.out.print("(5)objp.pm():"); objp.pm(); 
    System.out.print("(6)objp.cm():エラー");

  }

}
実行結果
% javac j244a.java
% java j244a
(3)objp.pa = 111
(4)objp.ca = エラー
(5)objp.pm():親クラスで定義されたメソッド(pm)
(6)objp.cm():エラー