关于scala中的class和trait的一些总结

trait:

字面意思是特质或者特征,这个词翻译成特征比较合适。它的意义和java,c#中接口很类似。但是trait支持部分实现,也就是说可以在scala的trait中可以实现部分方法。

在scala中也是一般只能继承一个父类,可以使用with进行多重继承;

class:

Scala类和java类中有些区别,在Scala声明private变量会Scala编译器会自动生成get,set,在Scala中变量是需要初始化的,如果不声明private默认是public的

object:

Scala中没有静态修饰符,static,在object下的成员全部都是静态的,如果在类中声明了与该类相同的名字的object则该object是该类的“半生对象”,可以理解把类中的static集中放到了object对象中,伴生对象和类文件必须是同一个源文件,可以用伴生对象做一些初始化的操作

下面介绍一下,extends和with的关系:(具体看代码)object ClassAnd    trait Pet{ //相当于java 中的一个接口,但是他可以有自己的方法体

    def greet()="hello"
}
class Dog extends Pet{
override def greet(): String = "hello dog"
}
class Yellowdog extends Dog{
override def greet(): String = "I am a yellowdog"
}
trait Animal extends Pet{
override def greet(): String = super.greet()+"!"
}

def main(args: Array[String]): Unit = {
var pet=new Dog
println( pet.greet())
pet=new Dog with Animal
println(pet.greet())

}
}
输出结果:
hello dog
hello dog!
看到这个结果,明显看的出来,dog这个 对象除了自己方法的特性,还拥有Animal 的特性。所以他既继承了父类的特性,而且还有其他的特性。
原文地址:https://www.cnblogs.com/gxgd/p/8780237.html