Scala Trait

1.Trait中定义抽象方法

     Trait可以被作为接口来使用,此时Trait与Java的接口非常类似。在Scala中,类继承Trait后,必须实现其中的抽象方法(类似interface),实现时不需要使用override关键字,同时Scala同Java一样,不支持类多继承,但支持多重继承Trait,使用with关键字即可。

    注意:类使用extends继承Trait,与Java不同,这里不是implement,在Scala中,无论继承类还是继承Trait都是用extends关键字。

trait HelloTrait{
  def sayHello(name:String)
}
trait makeFriendsTrait{
  def makeFriends(p:Person)
}
class Person(val:name String) extends HelloTrait with makeFriendsTrait{
  def sayHello(name:String) = println("Hello," + name)
  def makeFriends(p:Person) = println("Hello," +p.name + " my name is " + name)
} 
2.Trait中定义具体方法,具体字段

    Scala中的Trait不只定义抽象方法,还可以定义具体方法,也有的说法是Trait的功能混入了类。 Trait也可以定义具体字段,继承Trait的类就自动获取了Trait中定义的类。 

注意:这里与继承Class不同,如果继承Class获取的字段,实际定义在父类中,而继承Trait获取的字段,就直接添加到了类中。 

trait HelloTrait{
  val friendsNum = 2
  def sayHello(name:String) = println("Hello," + name)
}
class Person(val:name String) extends HelloTrait{
  def makeFriends(p:Person) = println("Hello," +p.name +",I have " + friendNum + " friends")
  sayHello(name)
} 

3.Trait中定义抽象字段

    Trait中可以定义抽象字段,而Trait中的具体方法可以基于抽象字段来编写,但继承Trait的类,则必须覆盖抽象的field,提供具体的值。

trait HelloTrait{
  val message:String
  def sayHello(name:String) = println(message, + "," + name)
}
class Person(val:name String) extends HelloTrait{
  val message:String = "Hello"
  def makeFriends(p:Person) = {
    println("Hello," +p.name +",I have " + friendNum + " friends")
    sayHello(name)
  }
} 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值