欲しい機能
Javaの言語仕様で欲しいものとして、戻り値が違う型でのオーバーライド。
親クラスで定義されているメソッドをオーバーライドするときに、その戻り値として親クラスで定義されたメソッド戻り値の型に型変換可能な型を使用可能というもの。インタフェースの場合もありか。
以下に例を。
class Parent { Number func() { ... } } class Child extends Parent { Integer func() { ... } }
こういうことが出来て欲しい。矛盾は無いし、むしろ場合によっては具象クラスでは戻り値の型もより具体的な方が自然だと思うので。
コンパイラによる型チェックも厳しくすることが可能になるし。
インタフェースの場合はこんな感じ。
interface ParentInterface { Number func(); } /** * たとえば子インタフェースではより宣言を明確にする */ interface ChildInterface extends ParentInterface { Long func(); } /** * 実装クラスでも、実装内容に応じて戻り値型をより明確にする。 */ class ImplementClass1 implements ParentInterface { Integer func() { ... } } /** * これはコンパイルエラーになるとか。 * ChildInterface は 戻り値の型が Long あるいは Long の子クラスである * func() メソッドを持つことを強制する。 */ class ImplementClass2 implements ChildInterface { Integer func() {// コンパイルエラー ... } }
なんで無いんだろう・・・