2016-09-21 3 views
0

Я новичок для scala. Я пытаюсь создать объект, который расширяет абстрактный класс, как показано на рисунке нижеМожет ли объект расширить абстрактный класс в scala?

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

Как примирить 'Вы должны предоставить тип возврата для functions' с:' абстрактный класс F {Защиту е = 42} ' , затем: ' (новый F { }). f' return: 'res0: Int = 42' ' –

+2

В этом случае тип возврата выводится из реализации. Если ваш абстрактный класс не предоставляет реализацию по умолчанию или тип возврата, предполагается, что это '' Unit''. –

+0

Спасибо - 'абстрактный класс G {def g}'. Затем 'class GImpl расширяет G {переопределить def g: Int = 42}' не удается скомпилировать: 'error: overriding method g в классе G типа => Unit;'. Любой флаг компилятора или, я предполагаю, билет scala, требующий типа возврата для таких методов? –

0

Что касается этого вопроса:

More over is the below statement valid ???

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

Это не компилируется. object в основном означает singleton и может использоваться для «статических» методов. Не имеет смысла создавать более одного экземпляра синглтона. Взгляните на этот вопрос: Difference between object and class in scala

+0

что? вы уверены, что отвечаете на правильный вопрос? – pedrofurla

+0

Да, см. Мое редактирование. –

 Смежные вопросы

  • Нет связанных вопросов^_^