美文网首页
Scala-8.面向对象-构造函数

Scala-8.面向对象-构造函数

作者: 悠扬前奏 | 来源:发表于2019-07-09 23:32 被阅读0次

Scala类的主构造函数是以下组合:

  • 构造函数参数

  • 在类内部被调用的方法

  • 在类内部执行的语句和表达式
    和Java类似,类被实例化的时候它们会被赋值。

  • 构造函数可见性

    • 一个字段被声明为var,Scala会为该字段生成getter和setter方法
    • 一个字段是val,只会生成getter方法。
    • 如果一个字段没有val或者var,Scala不会生成getter和setter方法
    • var和val字段可以被private关键字修饰,防止生成getter和setter方法
  • 定义辅助构造函数:在类内部以this为名的方法定义辅助构造函数,可以定义多个付出构造函数,这些函数需要有不同的签名(参数列表)。

    • 辅助构造函数必须用this为名创建
    • 每个辅助构造函数必须从调用之前定义的构造函数开始
    • 一个构造函数通过this调用另一个不同的构造函数
    • case class里添加的辅助构造函数不是构造函数,是类的伴生对象中的apply方法
  • 私有构造函数:在类名和构造函数接受的任意参数之间插入一个private关键字,就创建了私有主构造函数

    • 这种写法可以用在单例模式
  • 设置构造参数默认值:

class Socket(val timeout: Int = 10000)
  • 覆盖默认的访问和修改方法:常见方法是在参数名前添加一个_name,然后根据Scala的约定声明getter和setter方法

  • 阻止生成getter方法和setter方法:用private或者private[this]修饰符定义字段。

    • private[this]修饰意味着只有包含改字段的对象可以访问,字段甚至无法被相同类型的其他实例访问。
  • 代码块或者函数赋给字段:将字段设置为函数或者期望的代码块,可以用lazy关键字选择延迟加载:

class Foo {
  lazy val text = 
  io.Source.fromFile("/etc/passwd").getLines.foreach(printlc)
}
object Test extends App {
  val f = new Foo
}

* 设置未初始化的var字段类型。通常需要吧字段定义为Option可以给到一个默认的初始值

* 继承类的构造函数参数:将基类的构造函数的参数定义为var或者val。定义子类构造函数时,不要用var或者val声明类间公用的字段,然后在子类中用val或者var定义新的构造函数参数。

* 调用父类的构造函数:在Scala定义子类时,可以在子类定义extends时控制被其主构造函数调用的超类构造函数。
  * 辅助构造函数的第一行必须调用当前类的另一个构造函数,好久无法调用超类的构造函数

相关文章

  • Scala-8.面向对象-构造函数

    Scala类的主构造函数是以下组合: 构造函数参数 在类内部被调用的方法 在类内部执行的语句和表达式和Java类似...

  • 01 面向对象

    -------------------【面向对象】------- ----《构造函数》--- 简介:所有的构造函数...

  • RYF javascript笔记3

    4. 面向对象编程 4.1面向对象编程概述 4.1.1简介 4.1.1.1构造函数 js没有“类”,而改用构造函数...

  • 构造函数和原型对象

    javascript使用构造函数和原型对象来进行面向对象编程 构造函数 在 JavaScript 中,构造器其实就...

  • js原型prototype原型链__proto__以及必会的ne

    什么是构造函数 构造函数是典型的面向对象编程语言,js的对象语言体系,是基于构造函数和原型链的构造函数是生成对象实...

  • 2018-11-23 面向对象4 ES6

    面向对象补充: JavaScript 通过构造函数生成新对象,因此构造函数可以视为对象的模板。实例对象的属性和方法...

  • 3-javascript 构造函数

    js中面向对象编程是基于构造函数(consstructor)和原型链(prototype)的。 构造函数作为对象的...

  • 2018-11-22

    JavaScript的面向对象是基于constructor(构造函数)与prototype(原型链)的。 构造函数...

  • 22

    JavaScript的面向对象是基于constructor(构造函数)与prototype(原型链)的。 构造函数...

  • 面向对象2

    JavaScript的面向对象是基于constructor(构造函数)与prototype(原型链)的。 构造函数...

网友评论

      本文标题:Scala-8.面向对象-构造函数

      本文链接:https://www.haomeiwen.com/subject/hjfyhctx.html