Scala 什么';有零参数的抽象类和没有参数的抽象类有什么区别?
在Scala中,以下各项之间的区别是什么:Scala 什么';有零参数的抽象类和没有参数的抽象类有什么区别?,scala,inheritance,parameters,call,abstract-class,Scala,Inheritance,Parameters,Call,Abstract Class,在Scala中,以下各项之间的区别是什么: abstract class Foo // And abstract class Bar() 继承时,它们之间似乎没有区别: // All of these seem to work case class FooA() extends Foo() case class FooB() extends Foo case class BarA() extends Bar() case class BarB() extends Bar 这些真的是等价的,
abstract class Foo
// And
abstract class Bar()
继承时,它们之间似乎没有区别:
// All of these seem to work
case class FooA() extends Foo()
case class FooB() extends Foo
case class BarA() extends Bar()
case class BarB() extends Bar
这些真的是等价的,还是有区别?如果它们都是等价的,我应该使用哪个抽象类定义,Foo
或Bar
我知道这种区别是因为咖喱。你能在构建一个类时使用咖喱吗?这就是为什么会存在这种奇怪的重复吗?没有区别。
抽象类
只是一个带有抽象
修饰符的类
,该修饰符规定,除非抽象成员以某种方式实现(无论是通过mixin等),否则不能实例化它。无参数类和参数列表为空的类没有区别。如果类没有参数列表,编译器将假定为空
这一点在以下文件中有明确说明:
如果没有给出形式参数节,则假定参数节()为空
因为它们是等价的,所以实际上只是你应该使用哪种口味的问题。为了简洁起见,我宁愿省略括号,但编译器无论如何都会把它们加回去
这唯一会让事情变得混乱的时候是当你有一个只有隐式参数的类。例如,这:
abstract class Foo(implicit bar: Bar)
实际上是
abstract class Foo()(implicit bar: Bar)
当试图手动提供隐式表达式时,这会导致混淆,必须提供括号。e、 g
new Foo()(new Bar)
据我所知,咖喱是原因。我从来没有在构建一个类的时候满足过自己,但我猜这是可能的。很好,这完全回答了我的问题,谢谢。