Scala-11.方法

和Java的相同:

  • 都是定义在类上的行为。

和Java的不同:

  • 指定方法的访问控制(可见性):

    • 默认是public,和Java相比,Scala提供了更细粒度的作用域控制:
      • 对象私有作用域(Object-private),只有当前对象的实例可见,用private[this]来定义
      • 私有作用域,当前实例和当前类的其他实例可见,用private来定义
      • 保护作用域,子类可见,protected
      • 包作用域,同包类所有成员可见,private[packageName],注意这里可以使不同级别的包
      • 公开作用域,默认就是,加public也行
  • 用super标识父类,来调用父类的方法

    • 如果类继承了多个特质(trait),并且这些特质实现了同样的方法,在使用super的时候,不仅要选择调用的方法,还要选择调用的特质。
  • 用一下方法,给方法的参数指定默认的值:

class Connection {
  def makeConnection(timeout: Int = 5000, protocol: = "http") {
    // doSomething
  }
}

c.makeConnection()
c.makeConnection(3000)
c.makeConnection(1000, "https")
  • 注意参数的复制顺序是从左到右的,如果不设置任何参数会先使用timeout,在设置Protocol的

  • 一般最好在调用方法的时候使用命名参数:

methodName(param1=value1, param2 = value2, ...)
  • 方法返回对象,也可以使用tuples从方法中返回多个值

  • 调用getter/setter方法可以不使用括号

  • 声明方法可能抛出的异常

  • 通过在参数类型后面添加一个*,将参数变为变参,也就是使用不同数量的参数。

    • 用_*适配一个序列
    • 一个方法只能有一个变参
  • 可变参数的使用类似数组

  • 方法用@throws注解来声明可能抛出的异常,可能的多个异常就列出多个@throws

  • 最好吧方法创建为支持链式风格的API

    • 如果类可能被扩展,需要吧this.type作为链式调用风格方法的返回值类型
    • 如果类不会被扩展,需要吧this从链式调用方法中返回出来

你可能感兴趣的:(Scala-11.方法)