关于java:了解scala中的类和对象

Understanding class and object in scala

我对斯卡拉非常陌生,现在我要做一个在Scala和JAVA中都写的项目。我遇到了这样的结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class SomeType{
    //...
}

trait Trait1 extends scala.AnyRef{
}

trait Trait2 extends extends scala.AnyRef{
}

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

object MyClass extends Trait2{
    //...
}

这有点让人麻木。据我所知,通过阅读这个答案,我们可以将object看作是具有抽象方法的类。也就是说,我们可以(用我的观点)用Java中的EDCOX1,1个对象定义一些映射。

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


我将试着从一个知道Java的人的角度来解释Scala EDOCX1 0。

在爪哇中,可以定义"正常"类成员和EDCOX1×1类成员。当Java中的某个成员(例如成员变量)是EDCOX1(1)时,该成员变量只有一个实例,该实例由该类的所有实例共享。

在scala中,没有static。与Java相比:无论你在爪哇中使用EDOCX1×1,你都可以在斯卡拉放一个EDCOX1×0。

一个Scala EDCOX1(0)是一个单独的实例,它只有一个实例,就像在Java中只有一个实例的EDCOX1和1个成员一样。

我希望这能更清楚地说明scala-object到底是什么。

scala-object可以像其他类或特性一样扩展类或特性,从而继承它所扩展的类或特性中定义的任何内容。这真的没有理由不可能。

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

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