当前位置:首页 » 编程语言 » javascala

javascala

发布时间: 2025-05-22 17:34:19

㈠ scala和java的区别

两者之间的区别,首先是功能运作程度不同,其次是插件不同。

㈡ scala trait 接口java怎么使用

今天说一说Java中的接口和Scala中的trait。一直就把特质当做半个接口用,因为确实挺像的,但仔细看,还是有很大区别的。

1.接口不会有构造器,特质可以有构造器,并且在实现类继承特质的时候,先要调用特质的构造器。
trait构造器的调用顺序小结:
class B{}
trait C extends E{}
trait D extends E{}
A extends B with C with D
(1)先调用父类构造器B
(2)继承多个trait从从左至右依次执行,先调用父trait E构造器,再调用C,再调用D构造器
(3)如果多个trait继承同一个父trait,则父trait只执行一次
(4)所有父类构造器和trait构造器执行完毕之后再执行自己的构造器A
2.接口中不能有未初始化的属性,且属性的修饰都是public static final,特质中可以有未初始化的属性变量,即抽象字段;
未初始化的属性可以有提前定义的特性,有两种方法,例如:
trait A{
val name:String//抽象字段
println("name: "+name)//特质中构造器执行的语句
}
class B extends A{
val name:String = "张三"
}
此时如果在main函数中new B的话,肯定会报错,因为new B必然先会调用特质中的构造器,而name并没有被赋值,所以会报错。有三种方法解决:
(1)class B extends {
val name:String = "张三" //提前定义在类前
} with A{}
(2)class B{}
main函数中new B的时候:
val b = new {
val name:String = "张三"//提前定义在new对象前
} with B with A
(3)利用lazy特性
trait A{
lazy val name:String = null
println("name: "+name)
}
class B extends A{
override lazy val name:String = "张三"
}

热点内容
oraclesql判断 发布:2025-05-22 21:00:24 浏览:443
未装存储卡 发布:2025-05-22 20:59:38 浏览:159
如何识破密码电子秤 发布:2025-05-22 20:55:06 浏览:969
c语言编译apk 发布:2025-05-22 20:25:26 浏览:967
centos解压targz 发布:2025-05-22 20:21:47 浏览:502
路由器的默认密码多少 发布:2025-05-22 20:02:00 浏览:649
ppt上传网站 发布:2025-05-22 19:49:02 浏览:639
我的世界头颅服务器 发布:2025-05-22 19:43:59 浏览:868
秦plusdmi哪个配置适合跑网约车 发布:2025-05-22 19:38:18 浏览:865
iphone版wifi密码查看密码是什么 发布:2025-05-22 19:36:39 浏览:619