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. T4模板与数据访问层的分离

    当在企业级应用中使用EF时,会发现实体类库与数据访问层是分离的. 来一张效果图. 具体步骤: 1.运用EF生成原始的实体类 在程序集中添加完ADO.NET实体数据模型后,生成相应的实体类,此时,T4模 ...

  2. in和exists哪个效率高本人测试证明

    in和exists哪个效率高本人测试证明 SQLSERVR语句 in和exists哪个效率高自己测试本人测试证明 最近很多人讨论in和exists哪个效率高,今天就自己测试一下 我使用的是客户的数据库 ...

  3. 鸟哥的LINUX私房菜基础篇第三版 阅读笔记 一

    1. Linux的档案权限与目录配置      一.基础知识:             a.分为三类,拥有者(owner).群组(group).其他人(other)             b.三个核 ...

  4. MySQL中函数、游标、事件、视图基本应用举例(代码)

    MySQL中function用户自定义函数c,fun,fun是面向过程的实现方式只能传入参数,或不传入参数,不能传出参数,必有返回值函数中是不能有create table drop table之类的语 ...

  5. PostgreSQL9.1 with PostGIS 2.1.4 for mapping coordinates on linux/ubuntu 已经打包成deb 可下载

    For location based service, I try to use postgresql with postgis. You can download postgis from here ...

  6. 动态加载与插件系统的初步实现(3):WinForm示例

    动态加载与插件系统的初步实现(三):WinForm示例 代码文件在此Download,本文章围绕前文所述默认AppDomain.插件容器AppDomain两个域及IPlugin.PluginProvi ...

  7. Hamilton

    import java.util.Vector; class Hamilton { int start; int a[][]; int len; int x[]; // 记录回路 boolean fl ...

  8. [置顶] Nosql笔记(一)——关系型数据库回顾

    Nosql笔记(一)——关系型数据库回顾 在平常的商业应用中,我们所使用的大多都是关系型数据库,诸如SQL  Server. MY SQL. Oracle等. 关于关系型数据库中的关键技术: 存储引擎 ...

  9. 设计模式08---设计模式之抽象工厂模式(Abstract Factory)

    1.场景模拟 举个生活中常见的例子:组装电脑,我们在组装电脑的时候,通常要选择一系列的配件,比如选择CPU时候,需要注意品牌,型号,针脚数目,主频,只有这些都确定下来,才能确定一个CPU.同样,主板也 ...

  10. gcc与g++的区别与联系

    gcc和g++都是GNU(组织)的编译器. 一.误区详解 误区一:gcc只能编译c代码,g++只能编译c++代码 两者都可以,但是请注意: 1.后缀为.c的文件,   gcc把它当作是C程序,而g++ ...