理解scala中的类和对象

St.*_*rio 0 java scala

我是scala的新手,现在我必须处理一个用scala和java编写的项目.我遇到了类似这样的结构:

class SomeType{
    //...
}

trait Trait1 extends scala.AnyRef{
}

trait Trait2 extends extends scala.AnyRef{
}

class MyClass(arg : SomeType) extends Trait1{
    //...
}

object MyClass extends Trait2{
    //...
}
Run Code Online (Sandbox Code Playgroud)

这有点麻木.据我所知,通过阅读这个答案,我们可以将objects视为仅使用抽象方法的类.即我们可以(在我看来)Class<T>在java中定义一些与对象的映射.

但在这个例子中classobject扩展了不同的 trait s.这就是我真正感到困惑的地方.我无法想象这意味着什么以及为什么使用它.

Jes*_*per 8

我将尝试object从了解Java的人的角度解释Scala 是什么.

在Java中,您可以定义"普通"类成员和static类成员.当某些东西(例如成员变量)static在Java中时,那么该成员变量只有一个实例,该实例由该类的所有实例共享.

在斯卡拉,没有static.与Java相比:无论你static在Java中做什么,你都会object在Scala中加入.

Scala object是一个单例 - 它只有一个实例,就像staticJava中只有一个实例的成员一样.

我希望能更清楚地了解Scala object究竟是什么.

Scala object可以像任何其他类或特征一样扩展类或特征,以便它继承在它扩展的类或特征中定义的内容.真的没有理由不应该这样做.

请注意,如果你有一个class和一个object同名的,那么这两个属于一起 - 他们可以看到彼此的私人成员.它object被称为类的伴随对象.

请注意,这并不能意味着object是类的一个实例.它不是 - 它是一个独立的东西站在课堂旁边.也许你对类和对象扩展不同特征的困惑来自于对这一点的误解.