7、scala面向对象编程之类
1、 定义一个简单的类
2、getter与setter
3、自定义getter与setter方法
4、仅暴露field的getter方法
5、private[this]的使用
6、Java风格的getter和setter方法
7、辅助constructor
8、主constructor
9、内部类
1、 定义一个简单的类
定义类和创建类的对象,并调用其方法

2、getter与setter
定义不带private的var field,scala自动生成getter和setter方法。
使用private修饰,则生成的getter和setter也是private的。
定义val field 则只会生成getter方法。
不希望生成setter和getter方法,则将field声明为private[this]。
调用getter和setter方法,分别叫做name和name_=。

3、自定义getter与setter方法
如果希望能够自己对getter和setter方法进行控制,则可以自定义getter和setter方法,自定义setter方法的时候一定要注意scala的语法限制,签名、=、参数之间不能有空格。

4、仅暴露field的getter方法
如果希望能够仅仅暴露一个getter方法,并且还能通过某些方法更改field的值,那么需要综合使用private以及自定义getter方法。此时field是private的,对外界没有暴露,自己可以实现修改field值的方法,可以覆盖getter方法。

5、private[this]的使用
在类的方法中,可直接访问类的其他对象的private field,有些情况下,不希望field被其他对象访问到,那么可以使用private[this],意味着对象私有的field,只有本对象内可以访问到。


6、Java风格的getter和setter方法
Scala的getter和setter方法的命名与java是不同的,是field和field_=的方式。如果要让scala自动生成java风格的getter和setter方法,只要给field添加@BeanProperty注解即可。此时会生成4个方法,name:String、name_=(newValue:String):Unit、getName():String、setName(newValue:String):Unit。


7、辅助constructor
Scala中,可以给类定义多个辅助constructor,类似于java的构造函数重载。辅助constructor之间可以相互调用,而且必须第一行调用主constructor。

8、主constructor
Scala中,主constructor是与类名放在一起的,与java不同。在类中,没有定义在任何方法或者代码块之中的代码,就是主constructor的代码,这点没java那么清晰。

主contructor中还可以通过使用默认参数,给参数设置默认的值。

如果主constructor传入的参数什么修饰都没有,比如name:String,那么类内部的方法是用到了,则会声明为private[this] name;否则没有该field,就只能被constructor代码使用而已。

9、内部类
Scala中,可以在类中定义内部类,与java不同,每个外部类的对象的内部类,都是不同的类。

7、scala面向对象编程之类的更多相关文章
- 6. Scala面向对象编程(基础部分)
6.1 基本介绍 6.1.1 Scala语言是面向对象的 1) Java时面向对象的编程语言,由于历史原因,Java中海存在着非面向对象的内容:基本类型,null,静态方法等 2) Scala语言来自 ...
- Scala面向对象编程与类型系统
Scala支持面向对象编程, 其面向对象特性与Java有共同之处并添加了很多新的特性. 类定义 scala使用class关键字定义类: class MyComplex(real0:Double, im ...
- 7. Scala面向对象编程(中级部分)
7.1 包 7.1.1 看一个应用场景 现在有两个程序员共同开发一个项目,程序员xiaoming希望定义一个类取名Dog,程序员xiaohong也想定一个类也叫Dog,两个程序员还为此吵了起来,该怎么 ...
- 大数据笔记(二十四)——Scala面向对象编程实例
===================== Scala语言的面向对象编程 ======================== 一.面向对象的基本概念:把数据和操作数据的方法放到一起,作为一个整体(类 c ...
- Scala实战高手****第7课:零基础实战Scala面向对象编程及Spark源码解析
/** * 如果有这些语法的支持,我们说这门语言是支持面向对象的语言 * 其实真正面向对象的精髓是不是封装.继承.多态呢? * --->肯定不是,封装.继承.多态,只不过是支撑面向对象的 * 一 ...
- 2.3 Scala面向对象编程基础
一.类 1.类的定义 Unit表示什么都不返回 方法体最后一句的值,就是方法的返回值. 2.类成员的可见性 3.方法的定义方式 定义方法的时候加圆括号,调用时可以加圆括号c.getValue()也可以 ...
- 8. Scala面向对象编程(高级部分)
8.1 静态属性和静态方法 8.1.1 静态属性-提出问题 有一群小孩在玩堆雪人,不时有新的小孩加入,请问如何知道现在共有多少人在玩?请使用面向对象的思想,编写程序解决 8.1.2 基本介绍 -Sca ...
- Scala 面向对象编程之类
定义一个简单的类 // 定义类,包含field以及方法 class HelloWorld { private var name = "leo" def sayHello() { p ...
- scala函数式编程(二) scala基础语法介绍
上次我们介绍了函数式编程的好处,并使用scala写了一个小小的例子帮助大家理解,从这里开始我将真正开始介绍scala编程的一些内容. 这里会先重点介绍scala的一些语法.当然,这里是假设你有一些ja ...
随机推荐
- Holedox Eating HDU4302 模拟
Problem Description Holedox is a small animal which can be considered as one point. It lives in a st ...
- Hadoop2.0之开启日志
配置 修改 mapred-site.xml <property> <name>mapreduce.jobhistory.address</name> <val ...
- go语言使用官方的 log package 来记录日志
原文:https://www.goinggo.net/2013/11/using-log-package-in-go.html ------------------------------------ ...
- 21行python代码实现拼写检查器
引入 大家在使用谷歌或者百度搜索时,输入搜索内容时,谷歌总是能提供很好的拼写检查,比方你输入 speling,谷歌会立即返回 spelling. 前几天,看到http://norvig.com/spe ...
- 【Android实战】记录自学自己定义GifView过程,能同一时候支持gif和其它图片!【有用篇】
之前写了一篇博客.<[Android实战]记录自学自己定义GifView过程,具体解释属性那些事! [学习篇]> 关于自己定义GifView的,具体解说了学习过程及遇到的一些类的解释,然后 ...
- LeetCode 976. Largest Perimeter Triangle (三角形的最大周长)
题目标签:Array 题目给了我们一个 边长的 array, 让我们找出 最大边长和的三角形,当然前提得是这三条边能组成三角形.如果array 里得边长组成不了三角形,返回0. 最直接的理解就是,找到 ...
- Android 自己定义Activity基类
我们在开发App的时候有时候碰到多个界面有一个共同点的时候.比方,都有同样的TitleBar.而且TitleBar能够设置显示的文字.TitleBar上的点击事件,假设给每个Activity都写一遍T ...
- Scikit-learn库中的数据预处理:独热编码(二)
在上一篇博客中介绍了数值型数据的预处理但是真实世界的数据集通常都含有分类型变量(categorical value)的特征.当我们讨论分类型数据时,我们不区分其取值是否有序.比如T恤尺寸是有序的,因为 ...
- [模板] BSGS
BSGS是一种解决一类专门的问题的解法,主要是解决已知A, B, C,求X使得A^x = B (mod p)这一类问题. 解法很简单,先设x = i*m-j(m=ceil(sqrt(p))),然后进行 ...
- eclipse和jdk版本对应问题
日常开发中,32位eclipse要用32位jdk,64位则必须要用64位jdk,否则启动时就会报错,load jvm.dll失败,昨天又遇到了这个问题.更换对应的版本之后就好了.tomcat等应用也有 ...