Scala的特质运用

//定义一个特质
//特质可以有抽象属性,具体属性,抽象方法,具体方法
trait Beauty {
  //抽象属性(没有=)
  val hair: String
  //具体属性(有等号)
  var age = 18
  val height = 180 //val不可以修改,var可以修改


  //抽象方法(没有=)
  def smile

  //具体方法
  def say(): Unit = {

  }
}

class Boy extends Beauty {
  //抽象属性 要具体实现
  val hair = "短发"
  //具体属性可以重写(可选)
  //var 修饰的,可以直接赋值
  //val修饰的,可以用override重写
  override val height = 189
  age = 20

  //抽象方法 要具体实现
  def smile(): Unit = {
    println(s"嘴角微微上扬")
  }
  //具体方法可以重写(可选)
  override def say(): Unit = {
    println(s"${age}岁,${height}大高个,${hair}")

  }
package Scala3
import java.io.PrintWriter

//定义一个特质
trait FileLogger{
  println(s"FileLogger ${filename}")
  //抽象属性
  val filename:String
  //定义一个对象,用来操作文件
  //new子类,先会执行父类的构造器,而此时filename没有值。所以导致PrintWriter(filename)报错。
  //val fileout=new PrintWriter(filename)
  val fileout=new PrintWriter(filename)
//  lazy val fileout=new PrintWriter(filename)

  //具体方法:把msg这个内容,写入到具体的文件中
  def log(msg:String):Unit={
    fileout.println(msg)
    fileout.flush()
  }
}
class Person051 extends FileLogger{
  override val filename="p051.log"
}
//NullPointerException:空指针异常
object gfddg {
  def main(args: Array[String]): Unit = {
//    val p=new Person051()
    val p=new{override val filename="p052.log"} with Person051

    //p.log中的log方法是谁定义的?是FileLogger定义的
    p.log("person051 create log")
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值