您的位置:首页 > 教育 > 锐评 > 谷歌优化seo_软件界面设计用什么软件_宁波seo高级方法_域名流量查询工具

谷歌优化seo_软件界面设计用什么软件_宁波seo高级方法_域名流量查询工具

2025/2/24 20:07:42 来源:https://blog.csdn.net/2401_83374563/article/details/144410349  浏览:    关键词:谷歌优化seo_软件界面设计用什么软件_宁波seo高级方法_域名流量查询工具
谷歌优化seo_软件界面设计用什么软件_宁波seo高级方法_域名流量查询工具

1 定义
隐式类指的是用implicit关键字修饰的类。在对应的作用域内,带有这个关键字的类的主构造函数可用于隐式转换。

2示例
现在有一个需求:有一个 Person 类,含有work()方法,有一个 Student 类,含有study()方法,在不使用继承的情况下,要求创建一个Person类的对象,可以直接调用Student类里的study()方法?

方法①: 使用 隐式类 ,将Student类定义为隐式类,这样在 new Person对象的时候, 编译器会默认在Student的主构造方法中传入Person对象,再转型为Student对象,这样新建的Person对象就有了双重身份,可以随便调用这两个类中的方法
代码如下:
创建一个scala class文件: Person

 class Person() {   
  def work()={
    println("人每天都要工作")
  }
}

object Test1{
 implicit class Student(obj:Person){   
   def study()={               //重点:主构造方法传入的类型必须要有----->  Person          
     println("喜欢学习scala")
   }
 }

  def main(args: Array[String]): Unit = {
    val person: Person = new Person 
    person.work()
    person.study()  
  }
}
1

注:

创建隐式类,主构造函数中必须要引入一个目标类当参数,且隐式类必须要在 object 中创建
本文是将隐式类与目标类写在了一个scala文件中,当隐式类写在其他文件中,调用时引入该隐式类所在的包即可
方法②: 使用 隐式函数 转换,创建Person对象时,编译器默认会将Person对象转为Student对象,从而使得新建的Person对象有了双重身份,可以随便调用这两个类中的方法
代码如下:
创建一个scala class文件: Person

class Person() {   
  def work()={
    println("人每天都要工作")
  }
}

class Student(){  
  def study()={               
    println("喜欢学习scala")
  }
}

object Test1{

  //重点:定义一个隐式函数,将 Person 转为 Student
  implicit def personToStudent(obj:Person):Student = new Student
  
  def main(args: Array[String]): Unit = {
    val person: Person = new Person 
    person.work()
    person.study()  
  }
}


注:

使用隐式函数,Studnet类只需定义为一个普通类即可
Person类可以使用多个隐式函数转型,从而使用其他类中的方法

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com