和Java的相同:
- 都是定义在类上的行为。
和Java的不同:
-
指定方法的访问控制(可见性):
- 默认是public,和Java相比,Scala提供了更细粒度的作用域控制:
- 对象私有作用域(Object-private),只有当前对象的实例可见,用private[this]来定义
- 私有作用域,当前实例和当前类的其他实例可见,用private来定义
- 保护作用域,子类可见,protected
- 包作用域,同包类所有成员可见,private[packageName],注意这里可以使不同级别的包
- 公开作用域,默认就是,加public也行
- 默认是public,和Java相比,Scala提供了更细粒度的作用域控制:
-
用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从链式调用方法中返回出来
网友评论