2016-04-12 12 views
0

オブジェクトの馬力フィールド(hp)の値からの力をキロワット(kW)に変換するオブジェクトcarに簡単なメソッドがあります。コードは以下の通りである:オブジェクト型でメソッドをオーバーロードする方法

MAP MEMBER FUNCTION engine_power 
RETURN FLOAT IS 
    v_kw FLOAT := 0.745699872; 
BEGIN 
    RETURN hp * v_kw; 
END; 

は今、私は電力を計算するには、このメソッドをオーバーロードしたいのですが、結果はINTEGERの代わりに、FLOATになります。

オブジェクトの本体でメソッドをオーバーロードする構文は何ですか?

答えて

1

one MAP methodしか指定できませんが、整数で別のメソッドを追加できます。

create type my_object as object (hp number, 
    MAP MEMBER FUNCTION engine_power RETURN FLOAT, 
    MEMBER FUNCTION engine_power RETURN INTEGER 
); 
/

Type MY_OBJECT compiled 

create type body my_object as 
    MAP MEMBER FUNCTION engine_power 
    RETURN FLOAT IS 
    v_kw FLOAT := 0.745699872; 
    BEGIN 
    RETURN hp * v_kw; 
    END; 

    MEMBER FUNCTION engine_power 
    RETURN INTEGER IS 
    v_kw FLOAT := 0.745699872; 
    BEGIN 
    RETURN TRUNC(hp * v_kw); 
    END; 
end; 
/

Type body MY_OBJECT compiled 

私はあなたが本当にどちらかがMAP方法になりたいわからないんだけど、あなたはメソッドを使用しているかによって異なります。あなたは、両方のタイプとタイプ本体文でそれを追加する必要があります。

+0

ドキュメントによれば、メンバーメソッドはオーバーロードされる可能性があります。 http://docs.oracle.com/cd/B28359_01/appdev.111/b28371/adobjbas.htm#i471260 – mathguy

+0

メソッドがオーバーロードされていることがわかりました。私は2つのMAPメソッドを持つことはできないと言っていますが、メソッドをオーバーロードすることはできません。どちらもMAPでないとうまくいくが、OPは他の理由で必要となるかもしれない。 –

+0

申し訳ありませんが、私はあまりにも速く読んでいた、もちろんあなたは正しいです。 – mathguy

関連する問題