class Base{ void meth1(){ System.out.println("Base meth1メソッド実行を表示しました。");} }

class Derived extends Base{ void meth1(){System.out.println("Derived meth1メソッド実行を表示しました。"); } }

class Super{ Base meth(){ System.out.println("Super methメソッド実行を表示しました。");return new Base(); } }

class Sub extends Super{ Derived meth(){ System.out.println("Sub methメソッド実行を表示しました。"); return new Base(); } }

class Sample{ public static void main(String[] args){ Super s = new Sub();s.meth().meth1(); } }

問題集やっててわからないことがあったので質問です。
このコードはclassSubのreturn new Base()の箇所が間違いで、
エラーになるようなのですが、
どういう理由でエラーになるのかがわかりません。

○ Base meth() ... return new Base
○ Base meth() ... return new Derived
× Derived meth() ... return new Base
○ Derived meth() ... return new Derived

以上4通りの戻り値型と、作成するオブジェクトの型の組み合わせをclassSubで試したところ、
3つ目(つまり前述コードの場合)だけがエラーになってしまいますが、理由がわかりません。
いろいろ検索してもわからなかったので、理由を教えていただければなと思います。
スペースの都合上、読みにくいコードになりました、すいません。
質問不足な感があったら、あとで追記したいと思います。
よろしくお願いします。