2016-09-21 15 views
0

私はスカラの初心者です。私は、この式は出力として)私は(を取得するには、オブジェクトのメンバ関数にアクセスしようとする一方でオブジェクトは抽象クラスをスカラで拡張できますか?

object Conversions extends UnitConversions 
{ 
override def inchesToCentimeters(inches:Int) = inches * 2.5 
override def gallonsToLiters(gallons:Int) = gallons * 3.78 
override def milesToKilometers(miles:Int) = miles * 1.6 
} 

abstract class UnitConversions 
{ 
def inchesToCentimeters(inches:Int) 
def gallonsToLiters(gallons:Int) 
def milesToKilometers(miles:Int) 
} 

下記のショーのような抽象クラスを拡張するオブジェクトを作成しようとしています。

Conversions.milesToKilometers(20) //I get output() 

次の文は有効ですか?

var ucv:UnitConversions = new Conversions 
println(ucv.milesToKilometers(3)) // I get output() here as well 

ありがとうございました!

答えて

7

あなたは、そうでない場合、彼らはUnitを返す、関数の戻り値の型を指定する必要があります。

abstract class UnitConversions { 
    def inchesToCentimeters(inches:Int): Double 
    def gallonsToLiters(gallons:Int): Double 
    def milesToKilometers(miles:Int): Double 
}` 
+0

''抽象クラスF {def f = 42} '' 、次に: '(新しいF { })f 'returning:' res0:Int = 42' ' –

+2

この場合、戻り値の型は実装から推測されます。抽象クラスがデフォルトの実装や戻り値の型を提供しない場合、それは '' Unit''関数とみなされます。 –

+0

ありがとう - '抽象クラスG {def g}'。次に、 'class GImpl extends G {override def g:Int = 42}'はコンパイルに失敗します: 'error:type => Unit;'クラスGのメソッドgをオーバーライドします。任意のコンパイラフラグまたは、私はそのようなメソッドで戻り値の型を必要とするスカラーチケットを推測していますか? –

0

この質問について:

More over is the below statement valid ???

var ucv:UnitConversions = new Conversions println(ucv.milesToKilometers(3))

これはコンパイルされません。 objectは基本的にシングルトンを意味し、 "静的"メソッドに使用できます。シングルトンのインスタンスを複数作成することは意味がありません。 Difference between object and class in scala

+0

何を助けましたか?あなたは正しい質問に答えていますか? – pedrofurla

+0

はい、私の編集をご覧ください。 –

関連する問題