美文网首页
Java的接口与Scala的trait特质

Java的接口与Scala的trait特质

作者: 幸运年轮 | 来源:发表于2018-07-24 11:59 被阅读0次

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 = "张三"

}

3.Java8之前接口中不能有已经实现的方法,之后可以有default方法和静态方法,特质中可以有已实现的方法也有抽象方法。

4.类实现implements多个接口,且用逗号“,”隔开,类继承extends多个trait且用with隔开。

5.Java中接口不能继承普通类,但是scala中特质可以extends class,并且该类成为所有继承trait的类的父类,例如:

class B{}

trait A extends B{}

class C extends A{}

则C是B的子类,B是C的父类

6.scala中为实例提供混入trait(只有某个对象有trait的性质,其他对象没有),Java中没有,例如:

trait A{}

trait B extends A{}

class C extends A{}

main函数中new对象时:

val c1 = new C

val c2 = new C with B//为对象c2增加了特质B的属性和函数,但c1没有

相关文章

  • 【Scala】特质与特质的线性化

    特质 Scala里相当于Java接口的是Trait(特征)。实际上它比接口还功能强大。与接口不同的是,它还可以定义...

  • Scala学习笔记 A2/L1篇 - 特质Traits

    教材:快学Scala chapter 10. 特质 Traits Scala特质与Java接口不同,Scala特质...

  • scala(十二) 特质

    特质的定义 Scala语言中,采用特质(trait)来代替接口的概念,也就是说,多个类具有相同的特质(trait)...

  • Scala编程基础24:Scala特征

    Scala Trait(特征)相当于Java中的接口,实际上它比接口的功能还要强大。与接口不同的是,Trait可以...

  • Java的接口与Scala的trait特质

    1.接口不会有构造器,特质可以有构造器,并且在实现类继承特质的时候,先要调用特质的构造器。 trait构造器的调用...

  • scala的Trait

    Trait基础 scala 中的Trait和Java中的接口(interface)极其类似 接口是彻底的抽象类,所...

  • Scala基础——特质(trait)

    概述 java通过接口实现多重继承,scala没有接口通过trait关键字实现多重继承。特质类似于抽象类的定义,t...

  • Scala基础(7)- 特质

    特质是Scala中一个很重要的特性。 更灵活的接口 Scala的特质(trait)定义和class几乎相同,只是t...

  • trait

    在scala中,trait相当于java中的interface关键字,可以用来定义接口,但是trait除了定义接口...

  • scala学习 - 特质

    本文来自《Programming in Scala》一书 Scala学习之特质(trait) 1 特质的定义 特质...

网友评论

      本文标题:Java的接口与Scala的trait特质

      本文链接:https://www.haomeiwen.com/subject/btpemftx.html