risc-v中文社区

 找回密码
 立即注册
查看: 1026|回复: 0

[原创] risc-v开发基础 Scala object继承abstract class---(27)

[复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2021-8-27 10:21:44 | 显示全部楼层 |阅读模式

在scala中的object类似java中的static一样,其实反编译之后就可以看到也是一个类,只不过名称为原来的名称最后再加了一个$,我们一般没有用到一个继承自abstract class的object,我也是查看GenTraversable.scala源码中发现这样的用法:

GenTraversable.scala中 object GenTraversable extends GenTraversableFactory[GenTraversable]
所以我做了一个实验,代码如下:

object ObjectExtendsAbstractClass {
  def main(args: Array[String]): Unit = {
    val v = Conversions.milesToKilometers(10)
    println(v) //16.0

    var ucv:UnitConversions = Conversions //这个地方不能用new,不管哪种写法我都无法new成功,只能用object的名字才OK
    println(ucv.milesToKilometers(3)) //4.800000000000001

    val iu1 = ucv.createinst
    val iu2 = ucv.createinst
    println(iu1)
    println(iu2)
    println(iu1 == iu2)
    val iu3 = ucv.createinst2
    val iu4 = ucv.createinst2
    println(iu3)
    println(iu4)
    println(iu3 == iu4)
    //scala.joe.com.implicits.Conversions$@76a4d6c
    //scala.joe.com.implicits.Conversions$@76a4d6c
    //true
    //scala.joe.com.implicits.Conversions$@76a4d6c
    //scala.joe.com.implicits.Conversions$@76a4d6c
    //true
    //
  }
}
//  GenTraversable.scala中 object GenTraversable extends GenTraversableFactory[GenTraversable]
//通过查看源代码发现这个语法就是object extends abstract class形式

object Conversions extends UnitConversions
{
  override def inchesToCentimeters(inches:Int) = inches * 2.5
  override def gallonsToLiters(gallons:Int) = gallons * 3.78
  override def milesToKilometers(miles:Int) = miles * 1.6

  override def createinst: UnitConversions = this

  override def createinst2: UnitConversions = Conversions
}

abstract class UnitConversions
{
  def inchesToCentimeters(inches:Int)ouble
  def gallonsToLiters(gallons:Int)ouble
  def milesToKilometers(miles:Int)ouble
  def createinst:UnitConversions
  def createinst2:UnitConversions
}
本帖内容来自:源帖地址

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-4-30 12:23 , Processed in 0.014979 second(s), 17 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表