在 Java 8 诞生之前, Java 未提供用于定义和使用这类可重用代码的内置机制。为此, Java必须使用特定的方法进行复用某一接口的实现代码。
Java 8 做出了改变。...Scala和Java一样不允许类从多个超类继承,在Java中类只能扩展 自一个超类,它可以实现多个接口,但接口中只能包含抽象方法,不能包含字段
Scala提供的"特质"类似于java中的接口, 但又有所不同...另外特质中不能有构造器参数,每个特质都有一个无参数的构造器
特质没有构造器参数是特质与类之间的其中一个差别,其它的特质具备类的所有特性,比如具体的和抽象的字段,以及超类
特质扩展类
上面我们看到了特质可以扩展另一个特质...继承了IOException,而IOException是扩展自Exception
自身类型:
当特质扩展类时,编译器能够确保所有混入该特质的类都认这个类为超类,Scala还有另一套机制可以保证这一点:自身类型...new Home with LoggerException
上面代码是不合法的,因为Home不是Exception的子类型
同时,特质还可以处理结构类型,这种类型只给出类必须拥有的方法,而不是类的名称