分類:[Java]
OS:Windows8
Java:jdk1.8.0_05
こんにちは、現在故あってJavaの勉強をしており、そこでオーバーライドの拡張機能というものを知りました
教科書によると、Ver.5.0で戻り値の型(クラス)の異なるメソッドもオーバーライドできるというものでした(ただしオーバーライドするメソッドの戻り値の型は継承したメソッドの戻り値の型のサブクラスでなくてはならないという制限はある)
ということで、以下の様なコードを書いてみました
class SuperZ
{
Number num()
{
return null;
}
}
class SubX extends SuperZ
{
// オーバーライドしてもサブクラスなら出力の型が変更できる
Double num()
{
return new Double(10);
}
}
class OverRideSample
{
public static void main(String args[])
{
SubX xx = new SubX();
System.out.println(xx.num());
}
}
DoubleはNumberのサブクラスなので、条件に反してはいないと思うのですが、このコードをコンパイルすると以下の様なエラーが出ます
OverRideSample.java:12: エラー: SubXのnum()はSuperZのnum()をオーバーライドできま
せん
Double num()
^
戻り値の型DoubleはNumberと互換性がありません
となります。この機能はVer5.0限定の機能なのでしょうか(私が使っているのは8.5です)
|