Scala入门(六)继承与特质

作为一门支持面向对象的语言,scala对于继承当然也有很好的支持,下边我们看下这部分内容:

1.抽象类

scala的抽象类范例:

abstract class Car{  
   val carBrand: String //字段没有初始化值,就是一个抽象字段
     def info() //抽象方法,不需要使用abstract关键字
     def greeting() {println("Welcome to my car!")}
}

需要注意:

  • 我们使用关键字abstract定义一个抽象类。
  • 抽象类的抽象方法,不需要关键字abstract,只要把方法体空着,不写方法体就可以。
  • 抽象类中定义的字段,只要没有给出初始化值,就表示是一个抽象字段,但是,抽象字段必须要声明类型,否则编译会报错。
2.扩展类

scala的扩展类和java有一点区别:

class BMWCar extends Car {
    override val carBrand = "BMW"  
    def info() {printf("This is a %s car. It is on sale", carBrand)} 
    override def greeting() {println("Welcome to my BMW car!")}
}

可以看出,我们一样是使用extends关键字继承Car类,但在实现上,有一些注意点:

  • 重写抽象类的字段时,需要使用override关键字,否则编译会报错。
  • 重写抽象类的抽象方法时,不需要override关键字,但加上也不会报错。
  • 重写抽象类的非抽象方法时,必须使用override关键字,否则编译会报错。
3.特质trait

特质用来在类之间进行接口或者属性的共享,有点类似java的interface。
特质的定义:

trait CarId{
  var id: Int
    def currentId(): Int     //抽象方法
    def greeting(msg: String) {println(msg)}  //非抽象方法
}

注意,我们使用trait来定义一个特质,特质中没有方法体的方法,默认为抽象方法。和java的interface不同的是,特质中可以包含具体的实现。

和java一样,scala也是“单继承,多实现”,即只能继承一个抽象类,但可以实现多个特质,我们通过extends [特质1] with [特质2] with [特质3] with…这样的方式实现多个特质,范例:

trait One {
  def one:String
}
trait Two {
  def two:String
}
trait Three {
  def three:String
}
class test extends One with Two with Three {
  override def one: String = ???

  override def two: String = ???

  override def three: String = ???
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值