为了账号安全,请及时绑定邮箱和手机立即绑定

Scala中对象和类之间的区别

Scala中对象和类之间的区别

潇潇雨雨 2019-11-21 10:55:27
我刚刚浏览了Internet上的一些Scala教程,并注意到在某些示例中,在示例开始时声明了一个对象。class和objectScala 和有什么不一样?
查看完整描述

3 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

class C 定义一个类,就像在Java或C ++中一样。

object O创建一个单例对象O作为某些匿名类的实例;它可用于保存与某些类的实例不相关的静态成员。

object O extends T使对象O成为的实例trait T; 然后您可以通过O任何地方,这T是预期的。

如果有class C,那么类object C的伴随对象C ; 请注意,伴随对象不会自动成为的实例C。

另请参阅Scala文档以获取对象和类。


用作静态成员的主机

大多数情况下,您需要一个object来保存无需首先实例化某个类的实例即可使用的方法和值/变量。这种用法与staticJava中的成员紧密相关。


object A {

  def twice(i: Int): Int = 2*i

}

然后,您可以使用调用上述方法A.twice(2)。


如果twice是某个类的成员A,那么您需要首先创建一个实例:


class A() {

  def twice(i: Int): Int = 2 * i

}


val a = new A()

a.twice(2)

您可以看到这是多么冗余,因为twice它不需要任何特定于实例的数据。


用作特殊的命名实例

您也可以将object自身用作类或特征的某些特殊实例。执行此操作时,您的对象需要扩展一些对象trait才能成为其子类的实例。


考虑以下代码:


object A extends B with C {

  ...

}

此声明首先声明一个匿名类(不可访问),该类同时扩展了B和C,并实例化名为的此类的单个实例A。


这个装置A可以被传递到期望类型的对象的功能B或C,或B with C。


的附加功能 object

Scala中还存在一些对象的特殊功能。我建议阅读官方文档。


def apply(...) 启用的常规方法的无名称语法 A(...)

def unapply(...)允许创建自定义模式匹配提取器

如果附带同名的类,则对象在解析隐式参数时将扮演特殊角色


查看完整回答
反对 回复 2019-11-21
  • 3 回答
  • 0 关注
  • 881 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信