Scala中方法和函数的区别、class和object的区别、Scala超类Any、Scala中的AnyVal、AnyUnit、AnyRef 04

本文聚焦Scala编程知识,介绍了Scala中所有类的超类Any及其子类AnyVal和AnyRef,阐述了值类型与引用类型的基类概念。还对比了方法和函数的区别,如函数可作参数传入方法等。此外,说明了class可实例化,object类似Java静态代码块,为单例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Scala中的超类Any

在Scala中,Any类是所有类的超类,Any有两个子类:AnyVal和AnyRef

1.1 AnyVal

  • AnyVal是所有值类型的基类,它描述的是值,而不是代表一个对象。
  • 它包括9个AnyVal子类型:
    • scala.Double
    • scala.Float
    • scala.Long
    • scala.Int
    • scala.Char
    • scala.Short
    • scala.Byte
  • 上面是数字类型,还包括scala.Unitscala.Boolean是非数字类型。

1.2 AnyRef

  • 是所有引用类型的基类。除了值类型,所有类型都继承自AnyRef。

2. Scala中方法和函数的区别

  • 函数可作为一个参数传入到方法中,而方法不行。
  • 在Scala中无法直接操作方法,如果要操作方法,必须先将其转成函数,有两种方法可以将方法转成函数
    • 在方法名称后面紧跟一个空格下划线告诉编译器将方法转成函数;
    • 通常情况下,编译器会自动将方法转换成函数,例如一个应该传入一个方法。编译器会自动将传入的方法转换成函数。
  • 函数必须要有参数列表,而方法可以没有参数列表。
  • 在函数出现的地方我们可以提供一个方法;在需要函数的地方,如果传递一个方法,会自动进行ETA展开(把方法转换为函数)
    如果我们直接把方法赋值给变量会报错。如果我们指定变量的类型就是函数,那么就可以通过编译。
    当然我们也可以强制把一个方法转换给函数,这就用到了scala中的部分应用函数;
  • 函数是继承了trait,他就具有toString,apply,curried,~;方法不具有这些特性;
  • 函数定义的的时候,需要传递形式参数,但是再函数中,传递函数的参数个数有限制,最多能传递22个参数。

3. class和object

  • class可以new
    • 每个辅助构造器执行必须以主构造器或者其他辅助构造器的调用开始
    • 因此子类的辅助constructor是一定不可能直接调用父类的constructor的;
  • object
    • 相当于java中的静态代码块,单例的
    • 存放静态的field或者method
    • 有apply()方法,伴生类(参数…)会调用这个方法,创建一个伴生类对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值