ずっと誤解していた。注意すべし!!
「サブクラスがスーパークラス型変数に代入されたときには、サブクラス独自に宣言して実装したフィールドやメソッドは使えない!」
つまり、


public class MainClass {
public static void main(String[] args) {
SuperClass s = new SubClass();
System.out.println(s.superClassField);
System.out.println(s.subClassField);
}
}
class SuperClass{
String superClassField = "Super Class Field";
}
class SubClass extends SuperClass{
String subClassField = "Sub Class Field";
}
では、「System.out.println(s.subClassField);」の部分でコンパイルエラーになる。
つまり、一旦、親クラス or インターフェースに型変換された(親クラス等に代入することにより暗黙的に型変換される)変数は完全に親クラス等としてふるまう。
もし、サブクラス内で定義されたのフィールドやメソッドを使いたければ、明示的に、サブクラスにキャストする必要がある。
つまり、main()メソッドの中を

SuperClass s = new SubClass();
System.out.println(s.superClassField);
System.out.println(((SubClass) s).subClassField);
とすればいい。