Can an object extend abstract class in scala?
我是斯卡拉的新手。我试图创建一个扩展抽象类的对象,如下所示
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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 )
} |
当我试图访问对象的成员函数时,我得到()这个表达式作为输出。
1
| Conversions.milesToKilometers(20) //I get output () |
下面的陈述是否有效????
1 2
| var ucv :UnitConversions = new Conversions
println (ucv. milesToKilometers(3)) // I get output () here as well |
事先谢谢!
您需要为函数提供返回类型,否则它们返回Unit:
1 2 3 4 5
| abstract class UnitConversions {
def inchesToCentimeters (inches :Int ): Double
def gallonsToLiters (gallons :Int ): Double
def milesToKilometers (miles :Int ): Double
}` |
- 我怎样才能使You need to provide a return type for the functions与:abstract class F { def f = 42 }和解,然后:(new F {}).f退回:res0: Int = 42呢?`
- 在这种情况下,返回类型是从实现中推断出来的。如果抽象类既不提供默认实现,也不提供返回类型,则假定它是一个Unit函数。
- 谢谢-abstract class G { def g }。然后,class GImpl extends G { override def g: Int = 42 }无法编译:error: overriding method g in class G of type => Unit;。我推测,任何编译器标志或者scala票据都需要在这些方法上有返回类型吗?
- 编译器标志是-xfuture-deprecation(警告),我个人喜欢-xfatal警告;-)
- 谢谢大家,帮了大忙
关于这个问题:
More over is the below statement valid ???
var ucv:UnitConversions = new Conversions println(ucv.milesToKilometers(3))
这无法编译。object基本上是单例的,可以用于"静态"方法。创建单个实例的多个实例是没有意义的。看看这个问题:scala中对象和类的区别
- 什么?你确定你回答的是正确的问题吗?
- 是的,请看我的编辑。