scala当中的类
1、类的定义与创建
创建一个scala class来定义我们的一个类。类当中可以定义各种属性或者方法,或者函数都可以
|
class Person { //定义一个属性,叫做name的,使用val不可变量来进行修饰 // 用val修饰的变量是可读属性,有getter但没有setter(相当与Java中用final修饰的变量) val name:String ="zhangsan" //定义一个属性,叫做age的,使用var可变量来进行修饰 //用var修饰的变量都既有getter,又有setter var age:Int = 28 //类私有字段,只能在类的内部使用或者伴生对象中访问 private val address:String = "地球上" //类私有字段,访问权限更加严格的,该字段在当前类中被访问 //在伴生对象里面也不可以访问 private[this] var pet = "小强" //在类当中定义了一个方法, def hello(first:Int,second:String):Int ={ println(first+"\t"+second) 250 } /** * 定义了一个函数 */ val func1 =(x:Int,y:Int) =>{ x+y } } |
2、类的实例化以及使用
如果想要使用类的话,那么REPL就满足不了我们的要求了,我们重新创建一个对应的Object的scala文件
|
object ScalaClass { def main(args: Array[String]): Unit = { //创建对象两种方式。这里都是使用的无参构造来进行创建对象的 val person = new Person val person1 = new Person() //注意,我们可以使用对象的属性加上_= 给var修饰的属性进行重新赋值 //其实就是调用set方法,方法名叫做 age_= person.age_= (50) //直接调用类的属性,其实就是调用get方法 println(person.age) println(person.hello(50,"helloworld")) val func = person.func1(10,20) println(func) println("============") } } |
3、属性的getter和setter方法
对于scala类中的每一个属性,编译后,会有一个私有的字段和相应的getter、setter方法生成
|
//getter方法 println(person age) //setter方法 println(person age_= (18)) //getter方法 println(person.age) |
当然了,你也可以不使用自动生成的方式,自己定义getter和setter方法
|
class Dog2 { private var _leg = 4 def leg = _leg def leg_=(newLeg: Int) { _leg = newLeg } } |
使用之:
|
val dog2 = new Dog2 dog2.leg_=(10) println(dog2.leg) |
规范提示:自己手动创建变量的getter和setter方法需要遵循以下原则:
1) 字段属性名以"_"作为前缀,如:_leg
2) getter方法定义为:def leg = _leg
3) setter方法定义时,方法名为属性名去掉前缀,并加上后缀,后缀是:"leg_=",如例子所示
4、类的构造器
scala当中类的构造器分为两种:主构造器和辅助构造器
scala当中规定,所有的辅助构造器,最后都必须调用另外一个构造器,另外一个构造器可以是辅助构造器,也可以是主构造器
|
//主构造器,直接定义在类上面 class Dog (name:String,age:Int){ //在scala当中,可以直接将代码写在class当中,而在java当中, //代码必须包含在方法当中。 //其实在scala当中,虽然你把代码写在了Class类当中,经过编译之后, //class类的代码都进入到了主构造器方法当中去了 println(name) println(age) var gender:String = ""; def this(name:String,age:Int,gender:String){ //每个辅助构造器,都必须以其他辅助构造器,或者主构造器的调用作为第一句 this(name:String,age:Int) this.gender = gender } var color =""; /** * 我们也可以通过private来进行修饰我们的构造器, * @param name * @param age * @param color * @param gender */ private def this(name:String,age:Int,color:String,gender:String){ this(name:String,age:Int) this.color = color } } |
scala当中的类的更多相关文章
- scala当中的类型参数
类型参数主要就是研究scala当中的类或者scala当中的方法的泛型 1.scala当中的类的泛型 object Demo8 { def main(args: Arr ...
- Scala学习(五)---Scala中的类
Scala中的类 摘要: 在本篇中,你将会学习如何用Scala实现类.如果你了解Java或C++中的类,你不会觉得这有多难,并且你会很享受Scala更加精简的表示法带来的便利.本篇的要点包括: 1. ...
- scala当中的对象
1.scala当中的Object 在scala当中,没有类似于像java当中的static修饰的静态属性或者静态方法或者静态代码块之类的,但是我们可以通过scala当中的Object来实现类似的功能. ...
- Scala具体解释---------类
Scala中的类 摘要: 在本篇中.你将会学习怎样用Scala实现类. 假设你了解Java或C++中的类,你不会认为这有多难.而且你会非常享受Scala更加精简的表示法带来的便利.本篇的要点包含: 1 ...
- Scala 深入浅出实战经典 第63讲:Scala中隐式类代码实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Programming In Scala笔记-第十一章、Scala中的类继承关系
本章主要从整体层面了解Scala中的类层级关系. 一.Scala的类层级 在Java中Object类是所有类的最终父类,其他所有类都直接或间接的继承了Object类.在Scala中所有类的最终父类为A ...
- 第41节:Java当中的类集框架
Java当中的类集框架 类集框架,那么什么是类集框架,集合的种类有哪些,类集框架的基础结构. 类集框架是一组类和接口的集合,位于java.util包当中,是用来用户存储和管理对象的,在这个类集合框架中 ...
- Scala(三):类
类:Class 1.简单类和无参方法 2.带getter和setter属性 3.只带getter属性 4.对象私有字段 5.Bean属性 6.辅助构造器 7.主构造器 8.嵌套类 1.简单类和无参方法 ...
- Scala中的类学习
Scala中的类学习 从java了解类的情况下,了解Scala的类并不难.Scala类中的字段自动带getter和setter方法,用@BeanProperty注解生成javaBean对象的getXX ...
随机推荐
- [PY3]——基本语法
Python3基本语法-xmind图 常量/变量 1. 常量:一旦赋值就不可再改变.不能对它重新赋值.python不存在常量2. 字面常量:一个单独出现的量,未赋值给任何变量或常量3. 变量: i=3 ...
- oracle用plsql登陆出错,提示ORA-12170:TNS:链接超时 --------关闭防火墙试试
oracle用plsql登陆出错,提示ORA-12170:TNS:链接超时 但是使用sqlplus可以连接 ping 本机127.0.0.1 显示一般故障 后关闭防火墙,问题解决. ps:登录时使用@ ...
- XML的基本概念和Android下的使用
1. XML的基本概念 1. 什么是XML: 1). XML是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,很类似HTML.它被设计的宗旨是表示数据,而非 ...
- 工作中遇到的一道SQL应用题
登录日志表 CREATE TABLE [dbo].[LoginLog]([Seq] [int] NOT NULL IDENTITY(1, 1), --Seq[UserId] [varchar] (2 ...
- unity TileMap 简述
主要工具 说明 更多说明 Sprite 精灵,纹理的容器. 大型纹理图集可以转为精灵图集(Sprite Sheet). Tile 瓦片,包含一个精灵,以及两个属性,颜色和碰撞体类型. Tilema ...
- 图解源码之java锁的获取和释放(AQS)篇
以独占式不公平锁为例,通过5个线程争夺ReentrantLock的过程,图解ReentrantLock源码实现,了解显示锁的工作流程. 任何时刻拿到锁的只有一个线程,未拿到锁的线程会打包成节点(nod ...
- Bash:获取当前脚本路径
可以使用readlink命令必须加上-f参数,readlink用于读取链接文件所指向的文件,这样对于一些建立了软连接的脚本文件的话非常适用,而对于一般的脚本文件需要加上-f参数否则readlink文件 ...
- jquery自动去除form表单中input框前后的空格
1. 2. <script type="text/javascript"> $(document).ready(function() { $('#searchform ...
- jQuery处理JSONP
http://www.g7blogs.com/?p=821 作为一枚前端,提起jsonp大家都不会陌生.特别是在我们组内的业务中,和服务器端交互的数据几乎都是采用这种形式.但假如要让你用原生的JS写出 ...
- 自动生成了一本ES6的书
![WeChat_1462668550.jpeg](http://upload-images.jianshu.io/upload_images/1952818-7bd17a9dd6401dc6.jpe ...