C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: Javaのオーバーライドの拡張について


(過去ログ 122 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■72784 / inTopicNo.1)  Javaのオーバーライドの拡張について
  
□投稿者/ OROCHI (39回)-(2014/07/15(Tue) 17:24:48)

分類:[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です)

引用返信 編集キー/
■72786 / inTopicNo.2)  Re[1]: Javaのオーバーライドの拡張について
□投稿者/ もりお (23回)-(2014/07/15(Tue) 20:01:53)
No72784 (OROCHI さん) に返信

jdk1.8.0_05で試してみましたけども、私の環境ではOROCHIさんが書かれたコードそのままで、
コンパイルできて実行できました。なんででしょうね。バージョンが古いコンパイラを参照してたりしないですか?
引用返信 編集キー/
■72819 / inTopicNo.3)  Re[2]: Javaのオーバーライドの拡張について
□投稿者/ かたぎり (1回)-(2014/07/21(Mon) 21:40:08)
コンパイラは何をお使いなのか
IDEとして何をお使いなのか
それが判れば、参照しているコンパイルのバージョンを特定できると思います。

どちらにしても、コードだけではない、外部要因であることが高いかなぁ。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -