TypechoJoeTheme

IT技术分享

统计

08. Scala 面向对象——Scala语言基础教程

2018-04-24
/
0 评论
/
658 阅读
/
正在检测是否收录...
04/24

类的定义

  • 不用写public,可以写private,并且可指定访问范围,如private[dunso],则该类只能在dunso包下被访问
  • 类名和文件不用同名
  • 使用object代表静态对象,定义在静态对象里面的方法是静态方法,定义在静态对象里面的变量是静态变量
  • 伴生对象:使用object定义的,在同一个文件中,和类的名字相同
  • 如果类没有构造方法,在创建对象的时候,可以不加括号,直接new类的名字
  • 使用val定义的属性,可以读,不能改,相当于只有getter方法,没有setter方法,只能在类内部和伴生对象中访问,即相当于private修饰
  • 使用var定义的属性,可以读也可以写,相当于基友getter方法,也有setter方法,只能在类内部和伴生对象中访问,即相当于private修饰
  • 使用private修饰的属性,只能在类的内部和伴生对象中访问
  • 在private后加上this,即private[this] 修饰的属性,只能在类的内部访问,不能在伴生对象中访问
  • 在不确定各类型的默认值的情况下,可以使用“_”代替,即 var name : String = _
  • 在定义类的时候,如果前面加上了case,则用于模式匹配match

构造器定义

主构造器跟在类名后面

class Person(val name: String, val age : Int) {}
  • 此时name和age也是Person的成员变量
  • 在定义的时候,可以给初始值
  • 如果没有用val 或者var修饰,那么形参相当于private[this]修饰
  • 形参还可以用private 修饰
  • 如果主构造器使用private修饰,则构造器只能在伴生对象中使用

其他构造器为辅助构造器

def this(name : String, age : Int, gender : String){ // 辅助构造器不允许使用val修饰符修饰其形参
    this(name, age)
}

辅助构造器中必须先调用主构造器,所以辅助构造器的参数一般会比主构造器的参数多,为了能够使用反射,我们一般将无参构造器定义成主构造器

class Person() {} //  “()”可省略

trait

  • 中文叫“特指”,相当于java 8的接口,里面可以有实现,也可以没有实现。
  • 一个类只能继承一个类,可以实现多个“特指”,实现的关键字不用“implement”,用“with”,实现多个“特指”,用多个“with”
  • 定义类的时候,无论是继承类,还是实现“特指”,第一次必须用extends
  • 重写非抽象的方法,需要在def前面加上override,否则报错。重写抽象方法,可以加override,也可以不加

在new实例的过程中,可以使用with动态实现一个接口

val person = new Person() with Speak
Scala 基础教程
朗读
赞 · 0
版权属于:

IT技术分享

本文链接:

https://idunso.com/archives/2689/(转载时请注明本文出处及文章链接)