scala中的隐式参数、隐式方法、隐式类

在这里插入图片描述

Person类

/**
  * @author WGY
  */
object Person {
}
class Person{
  def hello()={
    println("hello!!!!!!!")
  }
}

Student类

/**
  * @author WGY
  */
object Student {
  implicit class Student(obj: ImplicitDemo) {
    def showStuMsg(): Unit = {
      println("我是一名小学生")
    }
  }
}

ImplicitDemo类

/**
  * @author WGY
  */
class ImplicitDemo

object ImplicitDemo {

  def main(args: Array[String]): Unit = {
    //隐式参数
    implicit var tmp:Int=5
    //单个隐式参数
    def fun1(a:Int)(b:Int)(implicit c:Int):Int={
      a+b+c
    }
    //调用
    println(fun1(5)(5))//----->15
    println(fun1(5)(5)(10))//-----20
    /*从上面两个例子可以这样理解 隐式参数就是事先设置好的参数
    如果忽略不写,就会带上默认值,如果调用时赋值了参数以赋值为准
    优先级:传参>默认
     */
    //如果在使用隐式参数的时候就赋 默认 值那么优先级是什么样的呢
    def fun2(a:Int)(b:Int)(implicit c:Int=100):Int={
      a+b+c
    }
    println(fun2(5)(5))//----->15
    println(fun2(5)(5)(1000))//----->1010
    //将第8行注释结果为110 可以推断出优先级为
    //传参>隐式>默认



    //隐式方法
    /*
    在scala中如果想调用其他类的方法,可以通过隐式方法来调用
    新建一个Person类 编写hello方法
     */
    //编写隐式方法
    implicit def implicitDemo2Person(obj:ImplicitDemo):Person=new Person

    var test1=new ImplicitDemo
    test1.hello()//不需要对Person新建对象就可以调用



    //隐式类
    /*
    编写一个隐式类Student
     */
    //导包
    import Student._
    test1.showStuMsg()//----->我是一名小学生
    //对于隐式类,导包就可以使用
    /*
    但是,因为Student中方法参数只写了ImplicitDemo
    所以除了ImplicitDemo其他类就不能直接调用Student的方法
    这是只要是其他类成为ImplicitDemo的子类就可以了
    也就是继承ImplicitDemo类就可以调用Student中的方法
     */
  }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值