Scala class:  

  Scala 源文件中可以有很多类(class),这些类默认都是Public的,public是Scala的默认访问级别。在Scala中,声明一个未用priavate修饰的字段 var age,scala编译器会字自动帮我们生产一个私有字段和2个公有方法get和set ,这和C#的简易属性类似。例如:

 stu.age = 10 (此处的age是def age = (x$1: Int):Unit)

 println(stu.age) (此处的age是def age: Int)

  若使用了private修饰,则它的方法也将会是私有的。这就是所谓的统一访问原则。

  定义方法时,如果仅仅为了计算单个很短的表达式,可以不写大括号;当返回值类型可推断时也可以不写返回值;甚至也可以同时不写等号&返回类型(这种情况下一定要有大括号),同时不写等号&类型的方法的返回值是 Unit。因此,对于不想返回Unit的方法一定要加“=”, 不然会出错,得不到想要的的结果。

  还有一种常用的定义方式是:

 private [this] var gender = "male"          //代表该属性只属于当前实例,即使是类内部的方法也不能访问该属性

类构造器:

  每个类都有一个默认构造器this(),重载(附属、辅助)构造器都需要直接或间接(即调用其它辅助构造器)调用主构造器this(),换句话说,Scala类中的每个辅助构造器都是以”this(...)“形式开头的。因此可以说主构造器是类的唯一入口点。

  Scala编译器将把类内部的任何既不是字段又不是方法的代码编译至主构造器中。实例化对象时传入的参数仅用来构造对象,不能在对象外部直接访问,如果要访问需要重新定义字段并将参数复制给对应字段。

  可以利用先决条件(precondition)保证主构造器在合理的情况下调用。例如:class Rational(n: Int, d: Int){ require(d != 0) },如果传入的值为false,require将抛出IllegalArgumentException异常阻止对象被构造。

  如果希望实例化类的时候禁止调用主构造器this,就在定义类的时候使用Private关键字,例 : class Teacher private{}

Scala 类和对象的更多相关文章

  1. Scala实战高手****第9课:Scala类和对象彻底实战和Spark源码鉴赏

    scala类和对象 RDD中创建_sc和deps相比java更加的简洁. 在Spark的例如SparkContext.sqlSpark等全局成员在完成实例化. 在唯一实例的时候一般不会去使用伴生对象a ...

  2. Scala类与对象

    类简介 简介 类是对象的蓝图.一旦你定义了类,就可以用关键字new根据类的蓝图创建对象.在类的定义里,可以放置字段和方法,这些被笼统地称为成员.对于字段,不管是val还是var定义的,都是指向对象的变 ...

  3. Spark记录-Scala类和对象

    本章将介绍如何在Scala编程中使用类和对象.类是对象的蓝图(或叫模板).定义一个类后,可以使用关键字new来创建一个类的对象. 通过对象可以使用定义的类的所有功能. 下面的图通过一个包含成员变量(n ...

  4. Scala类和对象(二)

    1. 类和属性 1.1 如何控制构造函数字段的可见性 在Scala中: 如果一个字段被声明为var, Scala会为该字段生成getter和setter方法. 如果字段是val, Scala只生成ge ...

  5. Scala类和对象

    1.面向对象 Scala的类与java.C++的一些比起来更简洁,速度更快 对象:使用object关键字修饰的 类:使用class关键字修饰的new Person()实例对象 new类:类的实例(对象 ...

  6. scala 类,伴生对象

    1.属性的定义 编写一个PersonS类,并在其中定义一些属性,通过PersonS.scala 编译后的情况查看,可以知道不同修饰符修饰的属性分别会生成什么方法(set,get) package co ...

  7. Spark记录-Scala类与对象小例子

    //基类-Person class Person(val na: String, val ag: Int) { //属性 var name: String = na var age: Int = ag ...

  8. Scala:类,对象和特征(接口)

    http://blog.csdn.net/pipisorry/article/details/52902609 Scala类和对象 类是对象的抽象,而对象是类的具体实例.类是抽象的,不占用内存,而对象 ...

  9. Scala 编程---类和对象

    类是对象的蓝图.一旦你定义了类,你就可以用关键字new从类的蓝图里创建对象.比方说,如果给出了类的定义: class ChecksumAccumulator { // class definition ...

随机推荐

  1. fiddle2 代理HTTPS请求无效?解决方法。

    fiddle2: 捕获的https请求结尾跟着443,是因为没有开启HTTPS捕获. 解决方案,开启HTTPS捕获:         然后你就看到能正常捕获HTTPS请求了:    

  2. SQLSERVER之高灵活的业务单据流水号生成

    SQLSERVER之高灵活的业务单据流水号生成 最近的工作中要用到流水号,而且业务单据流水号生成的规则分好几种,并非以前那种千篇一律的前缀+日期+流水号的简单形式,经过对业务的分析,以及参考网上程序员 ...

  3. 我的Emacs折腾经验谈(三) speedbar , tabbar 还有linum-mode

    离上一篇博客已经很遥远了,最近总是各种逛,但没有心思静下来写点东西,这回写一下我之前用的一些东西. Speedbar 首先是speedbar,这个东西是emacs自带的,效果立竿见影,请输入M-x s ...

  4. ASP.NET Web API的消息处理管道: HttpRoutingDispatcher

    ASP.NET Web API的消息处理管道: HttpRoutingDispatcher 认情况下,作为消息处理管道“龙头”的HttpServer的Dispatcher属性返回一个HttpRouti ...

  5. 不想再做"鸟蛋"

    至今为止学习C++两个学期了,有过迷茫,有过自信,有过崩溃,有过希望,有过伤心,有过高兴.这一路走来,C++虐我千百遍,我待C++如"初恋".                    ...

  6. EF 下的code fist 模式编程

    EF 分两种模式 codefirst(就是不知道数据是啥,也没有数据库)  和 database fist (数据已经设计好了) 首先打开vs  新建一个项目 创建一个控制台程序 然后 新建一个Tea ...

  7. 浅谈CSS3 box-reflect 属性

    今天说一下 CSS3的box-reflect属性,也就是倒影特效. 语法: box-reflect:包括3个值. 1. direction 定义方向,取值包括 above . below . left ...

  8. Redmine管理项目1-自定义属性

    先是点击页面导航条(最上面那排菜单,有主页.我的工作台.项目.管理.帮助等)上的“管理”菜单,看到下图: 看到里面的“自定义属性”菜单了吧,点击它,可以看到下面的界面: 点击那个“新建自定义属性”菜单 ...

  9. overflow属性及其在ios下卡顿问题解决

    overflow属性:http://www.w3school.com.cn/cssref/pr_pos_overflow.asp overflow:scroll/auto;在手机页面滑动不流畅问题: ...

  10. C#-实验3

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...