Scala和Java一样不允许类从多个超类继承,在Java中类只能扩展 自一个超类,它可以实现多个接口,但接口中只能包含抽象方法,不能包含字段
Scala提供的"特质"类似于java中的接口, 但又有所不同...另外特质中不能有构造器参数,每个特质都有一个无参数的构造器
特质没有构造器参数是特质与类之间的其中一个差别,其它的特质具备类的所有特性,比如具体的和抽象的字段,以及超类
特质扩展类
上面我们看到了特质可以扩展另一个特质...with LoggerException
上面代码是可以的,因为UnHappyException继承了IOException,而IOException是扩展自Exception
自身类型:
当特质扩展类时...,编译器能够确保所有混入该特质的类都认这个类为超类,Scala还有另一套机制可以保证这一点:自身类型(self type)
当特质以如下代码开始定义时:
this:类型 =>
它便能够被混入指定类型的子类...类型,而下面代码
val h = new Home with LoggerException
上面代码是不合法的,因为Home不是Exception的子类型
同时,特质还可以处理结构类型,这种类型只给出类必须拥有的方法