Scala上的从构造器也有一定的限制,Scala编程中写道。

“Scala 里的每一个从构造器的第一个动作都是调用同一个类里面其他的构造器。换句话说

就是,每个 Scala 类里的每个从构造器都是以“this(...)”形式开头的。被调用的构造
器既可以是主构造器(好像 Rational 这个例子),也可以是从文本上来看早于调用构造器
的其它从构造器。这个规则的根本结果就是每一个 Scala 的构造器调用终将结束于对类的
主构造器的调用。因此主构造器是类的唯一入口点。”

Scala中的构造器相较于Java比较特殊,分为两种:主构造器,从构造器。主构造器是和类中字段和方法的定义混合在一起的。

在Scala中,不需要像Java一样需要在类中定义一个与类名相同的方法来当作构造器。

主构造器的参数列表写在类名的后面,而构造器的内容,则直接写在类定义里面,所以说,一个Scala类里面,除了方法和字段的定义以外的代码,全都是主构造器的内容。

class Fruit(n: String, w: Int) {
val name = n
val weight = w
println("This is a " + n)
println("Weight = " + w)
}

如果接下来定义一个Fruit对象。

val apple = new Fruit("Apple", 10)

则会在屏幕上打印:

This is a Apple

Weight = 10

因为

println("This is a " + n)
println("Weight = " + w)

两行代码也是构造函数中的内容。

除了主构造器外,Scala中还有从构造器,用于使用和主构造器不同的参数来初始化对象。

从构造器的定义,都为def this开始。

例如,如果Fruit的默认重量为10。

class Fruit(n: String, w: Int) {
val name = n
val weight = w
println("This is a " + n)
println("Weight = " + w) def this(n: String) = this(n, 10)
}
val orange = Fruit("Orange")

Scala 中的构造器的更多相关文章

  1. Scala中的构造器

    Scala中的构造器 Scala中的构造器分为两类,主构造器和辅助构造器 主构造器是通过类名后面跟的括号里加参数列表来定义 辅助构造器是通过关键字this定义 定义一个无参主构造器 class rec ...

  2. Scala中的构造器和高阶函数

    构造器 在定义类时可以定义主构造器.主构造器可以同时声明字段. /** * 主构造器 * @author Administrator */ //在scala中,类和方法交织在一起 class Test ...

  3. 4.scala中的类

    版权申明:转载请注明出处.文章来源:http://bigdataer.net/?p=269 排版乱?请移步原文获得更好的阅读体验 1.针对不同字段生成的方法 字段生成的方法备注 var/val nam ...

  4. 第2节 Scala中面向对象编程:1、类的定义;2、类的构造器;3、object和伴生对象;4、apply和main方法

    6.    类.对象.继承.特质 Scala的类与Java.C++的类比起来更简洁,学完之后你会更爱Scala!!! 6.1.   类 6.1.1.    类的定义 package cn.itcast ...

  5. Scala中 object 和 class的区别

    object 在scala中没有静态方法和静态字段,所以在scala中可以用object来实现这些功能,直接用对象名调用的方法都是采用这种实现方式,例如Array.toString.对象的构造器在第一 ...

  6. Scala学习(五)---Scala中的类

    Scala中的类 摘要: 在本篇中,你将会学习如何用Scala实现类.如果你了解Java或C++中的类,你不会觉得这有多难,并且你会很享受Scala更加精简的表示法带来的便利.本篇的要点包括: 1. ...

  7. Scala进阶之路-Scala中的高级类型

    Scala进阶之路-Scala中的高级类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.类型(Type)与类(Class)的区别 在Java里,一直到jdk1.5之前,我们说 ...

  8. Scala类的构造器与访问器

    1.构造器 在Scala中,每个类都有一个主构造器.主构造器与类的定义交织在一起,如下: class Person ( private var _name: String, private var _ ...

  9. Scala中的类学习

    Scala中的类学习 从java了解类的情况下,了解Scala的类并不难.Scala类中的字段自动带getter和setter方法,用@BeanProperty注解生成javaBean对象的getXX ...

随机推荐

  1. 在JSP中如何使用JavaBean

    在JSP中使用JavaBean以后,可以实现HTML代码和Java代码的分离,是JSp更易于开发和维护.因此JavaBean成了JSP程序员必备的利器.虽然javaBean是java类,但是它也有自己 ...

  2. 源码安装mysql 5.7.19数据库

    1.系统要求yum install -y cmake make gcc gcc-c++ bison  ncurses ncurses-devel 2.创建用户和组groupadd mysql & ...

  3. shell 数组,双层循环打印变量

    双层循环,打印循环执行次数. 特别注意 ,shell 脚本赋值时 '=' 两侧不能有空格,否则报错,shell command not found 但在if 语句中需要有: STR1="ab ...

  4. Maven 使用国内镜像

    1 修改maven 的配置文件 settings.xml,添加阿里云的一个中央仓库. 2 找到maven 的配置文件,一般在 maven 安装目录 apache-maven-3.5.0\conf 文件 ...

  5. C# delegate 委托

    http://www.runoob.com/csharp/csharp-delegate.html

  6. vue-router路由的使用

    1.路由作用 用vue.js + vue-router创建单页面应用.页面不需要刷新就可以页面跳转,提供用户更好体验. 2.路由配置 new Router({ routes: [{ path: '/' ...

  7. 如何安全的下载Devcon.exe文件

    devcon.exe是windows设备管理器的命令行版本,可以让你在cmd中修改设备,但是微软没有提供单独的下载,只能下载一个2G多的wdk包(windows drive kits)才行.私下使用别 ...

  8. Atitit 获取剪贴板内容

    Atitit 获取剪贴板内容 1.1. Java当然有这个功能,但是体积大,先使用script语言实现吧..1 1.2. node.js 好像没这个api  ...1 1.3. Ahk也没有..Aut ...

  9. CodeBlocks 17.12 工程如何引用其他文件夹的头文件和源程序

    假设你的工程名为project,目录为F:\test.但是你想在project中使用文件夹F:\library下面的一些头文件和源程序.由于这些头文件和源程序与工程project不在同一目录下面,所以 ...

  10. lua 工具类(二)

    local tonumber_ = tonumber function tonumber(v, base) end function toint(v) return math.round(tonumb ...