Scala 类和对象
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 类和对象的更多相关文章
- Scala实战高手****第9课:Scala类和对象彻底实战和Spark源码鉴赏
scala类和对象 RDD中创建_sc和deps相比java更加的简洁. 在Spark的例如SparkContext.sqlSpark等全局成员在完成实例化. 在唯一实例的时候一般不会去使用伴生对象a ...
- Scala类与对象
类简介 简介 类是对象的蓝图.一旦你定义了类,就可以用关键字new根据类的蓝图创建对象.在类的定义里,可以放置字段和方法,这些被笼统地称为成员.对于字段,不管是val还是var定义的,都是指向对象的变 ...
- Spark记录-Scala类和对象
本章将介绍如何在Scala编程中使用类和对象.类是对象的蓝图(或叫模板).定义一个类后,可以使用关键字new来创建一个类的对象. 通过对象可以使用定义的类的所有功能. 下面的图通过一个包含成员变量(n ...
- Scala类和对象(二)
1. 类和属性 1.1 如何控制构造函数字段的可见性 在Scala中: 如果一个字段被声明为var, Scala会为该字段生成getter和setter方法. 如果字段是val, Scala只生成ge ...
- Scala类和对象
1.面向对象 Scala的类与java.C++的一些比起来更简洁,速度更快 对象:使用object关键字修饰的 类:使用class关键字修饰的new Person()实例对象 new类:类的实例(对象 ...
- scala 类,伴生对象
1.属性的定义 编写一个PersonS类,并在其中定义一些属性,通过PersonS.scala 编译后的情况查看,可以知道不同修饰符修饰的属性分别会生成什么方法(set,get) package co ...
- Spark记录-Scala类与对象小例子
//基类-Person class Person(val na: String, val ag: Int) { //属性 var name: String = na var age: Int = ag ...
- Scala:类,对象和特征(接口)
http://blog.csdn.net/pipisorry/article/details/52902609 Scala类和对象 类是对象的抽象,而对象是类的具体实例.类是抽象的,不占用内存,而对象 ...
- Scala 编程---类和对象
类是对象的蓝图.一旦你定义了类,你就可以用关键字new从类的蓝图里创建对象.比方说,如果给出了类的定义: class ChecksumAccumulator { // class definition ...
随机推荐
- .net下将富文本编辑器文本原样读入word文档
关键词:富文本编辑器 生成word 样式 为了解决标题中提出的问题,首选需要了解,在.net环境下读取数据库中的内容动态生成word至少有2种方式,[方式一]一种方式是在项目中添加引用,例如在“添 ...
- xhEditor实现插入代码功能
如果大家经常使用CSDN或者其他技术博客,都会有插入程序代码或脚本功能 开源中国 CSDN 这里介绍xhEditor实现插入代码功能,对xhEditor进行插件扩展 一.首先定义插件样式 <st ...
- jquery选择器之层级过滤选择器
$("ancestor descendant"):选取parent元素后所有的child元素 $("parent > child"):选取parent元素 ...
- javascript中字符串常用操作整理
javascript中字符串常用操作整理 字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用 ...
- SVN Access to '/svn/Test/!svn/me' forbidden,不能更新解决办法
从之前的电脑将Repositorise复制到现在用的PC,出现可以checkout但是不能update的问题.在网上找到以下解决方法,均未能解决. 1.确认URL跟实际一致: 2.确认用户名密码正确: ...
- cocos2d-x 3.0 cocos run Couldn't find the gcc toolchain.
出现这个错误是NDK_ROOT环境变量没有设置好,要么设置错了,要么没有重启终端(也就是环境变量还没有生效).我就是因为没有重启终端坑了一个晚上,我只能帮你到这了,玩cocos2d-x 3.0的朋友, ...
- asp.net MVC 路由系统
ASP.NET的路由系统是基于物理文件的路由注册,通过调用System.Routing.RouteTable的Routes(RouteCollection)属性的MapPageRoute()方法来完成 ...
- android:minSdkVersion 之我见
在 新建一个 android project 时,要求输入 minSdkVersion 这一项,一般我们是指定和我们使用的 SDK 版本相一致的 API Level. 然后,在androidManif ...
- javascript代码实现简单的五星评价功能!
<script type="text/javascript"> //★ var spans=document.getElementsByTagName("sp ...
- Java 使用httpclient Post与cxf 发布的Webservice通信
使用cxf发布的webservice不知道什么情况总会有时管用有时不管用,对于项目来说这肯定不行.又不想改动webservice因为代码太多.人懒! 于是便使用httpclient与webservic ...