社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

Java challenge どこに違和感を感じればよかったのかが分からない

以下のコード、コンパイル通ると思いますか?っていうもんだい。

public class PolymorphismChallenge {
	
public static void main(String[] args) {
	System.out.println(new Chris().getCharacter().getSimpleName());
	}
	
	abstract static class STARSSoldier {
		public STARSSoldier getCharacter() {
			return new Chris();
		}
	}
	
	static class Chris extends STARSSoldier {
		@Override
		public Chris getCharacter() {
			return new Chris();
		}
	}
}

Java/PolymorphismChallenge.java at master · blueskyarea/Java · GitHub

1.Chris インスタンスが生成される。
2.getCharacter() が呼ばれ、Chris インスタンスが返却される。

これだけなので、とくにコンパイルは通るように思えます。
話をややこしくしようとしているのは、Chris が STARSSoldier を継承しているところだと思います。
ただ、それも単純に考えれば、親クラスのメソッドをオーバーライドしているだけです。

実際、このコードを実行してみると、コンパイルは通って以下の出力が得られました。

Chris

ひっかけ問題があった時、するどい方は何でひっかけようとしているのかまで分かると思いますが、この問題に関してはそのようなところに想像が至らなかった。
まだまだ修行がたりない。