Scala中对象和类之间的区别

我刚刚浏览了Internet上的一些Scala教程,并注意到在某些示例中,在示例开始时声明了一个对象。

classobjectScala 和有什么不一样?


潇潇雨雨
浏览 885回答 3
3回答

缥缈止盈

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。的附加功能 objectScala中还存在一些对象的特殊功能。我建议阅读官方文档。def apply(...) 启用的常规方法的无名称语法 A(...)def unapply(...)允许创建自定义模式匹配提取器如果附带同名的类,则对象在解析隐式参数时将扮演特殊角色
打开App,查看更多内容
随时随地看视频慕课网APP