Javaの継承について質問です。

親インスタンスに子供インスタンスを割り当てて、インスタンスの変数、メソッ
ドを参照すると、変数は親、メソッドは子供が使用されます。これってこうい
う仕様なのでしょうか?


class Parent {
public int i = 11;

public void echo() {
System.out.println("P");
}
}

class Child extends Parent {
public int i = 22;

public void echo() {
System.out.println("C");
}
}

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

Parent p = new Child(); \\ Parent object <- Child

System.out.println("p.i = " + p.i);
p.echo();
}
}

結果
$ javac Test.java
$ java Test
p.i = 11
C
$