scala 基础十一 scala 中的trait特质

1.Scala类型系统的基础部分是与Java非常相像的。Scala与Java一样有单一的根类,Java通过接口来实现多重继承,而Scala则通过特征(trait)来实现(Scala的特征可以包含实现代码,这当然是与Java接口不同的。不过由于特征自己具有类型的功能,所以对于没有包含实现代码的特征,可以认为与Java的接口是等价的)

2.trait 的简单使用

package smart.iot

class scalatrait {
  
}

//定义一个trait
trait logger
{
  //可以在trait中定义一个方法
  def log(msg:String)="log messge:"+msg;
  
  //也可以在trait中定义一个抽象方法
  def add():Unit
}

class classA
{
  def say1=println("say:hello ClassA")
}

//如果没有父类的情况下,可以直接用 extends 继承 否则使用 with
class classB extends classA with logger
{
  def add(){println("hello scala")}
  def say2=println("say:hello ClassB")
}

//如果没有父类的情况下,可以直接用 extends 继承 否则使用 with
class classC extends logger
{
  def add(){println("hello world!")}
  
}

object loads
{
  def main(args: Array[String]): Unit = {
   
    var classa=new classA();
    classa.say1;
    
     var classb=new classB();
    classb.add;
    classb.say2;
    classb.log("搜嘎!")
    
    
     var classc=new classC();
    classc.add;
  
    classc.log("搜嘎!")
    
  }
}


2.trait 的继承

//定义一个trait
trait logger
{
  //可以在trait中定义一个方法
  def log(msg:String)="log messge:"+msg;
  
  //也可以在trait中定义一个抽象方法
  def add():Unit
}


trait t2 extends logger
{
  //实现䣂的抽象方法,当然也可以不实现
  def add=println("hello trait")
  //重写父类方法需要加 override
 override def log(msg:String)="log messge:"+msg;
}

 3. 在实例化一个类的时候同事with trait

    var classa=new classA() with t2;
    classa.say1;
    
    classa.add();
    classa.log(msg);

 4.完整代码

package smart.iot

class scalatrait {
  
}

//定义一个trait
trait logger
{
  //可以在trait中定义一个方法
  def log(msg:String)="log messge:"+msg;
  
  //也可以在trait中定义一个抽象方法
  def add():Unit
}


trait t2 extends logger
{
  //实现䣂的抽象方法,当然也可以不实现
  def add=println("hello trait")
  //重写父类方法需要加 override
 override def log(msg:String)="log messge:"+msg;
}

class classA
{
  def say1=println("say:hello ClassA")
}

//如果没有父类的情况下,可以直接用 extends 继承 否则使用 with
class classB extends classA with logger
{
  def add(){println("hello scala")}
  def say2=println("say:hello ClassB")
}

//如果没有父类的情况下,可以直接用 extends 继承 否则使用 with
class classC extends logger
{
  def add(){println("hello world!")}
  
}

object loads
{
  def main(args: Array[String]): Unit = {
   
    var classa=new classA() with t2;
    classa.say1;
    
    classa.add();
    classa.log("你好");
    
     var classb=new classB();
    classb.add;
    classb.say2;
    classb.log("搜嘎!")
    
    
     var classc=new classC();
    classc.add;
  
    classc.log("搜嘎!")
    
  }
}

 

 

 

posted @ 2017-07-03 17:55  jialiming  阅读(289)  评论(0)    收藏  举报