Я новичок для 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
Спасибо заранее!
Как примирить 'Вы должны предоставить тип возврата для functions' с:' абстрактный класс F {Защиту е = 42} ' , затем: ' (новый F { }). f' return: 'res0: Int = 42' ' –
В этом случае тип возврата выводится из реализации. Если ваш абстрактный класс не предоставляет реализацию по умолчанию или тип возврата, предполагается, что это '' Unit''. –
Спасибо - 'абстрактный класс G {def g}'. Затем 'class GImpl расширяет G {переопределить def g: Int = 42}' не удается скомпилировать: 'error: overriding method g в классе G типа => Unit;'. Любой флаг компилятора или, я предполагаю, билет scala, требующий типа возврата для таких методов? –