1. 类

1.1. 类的定义

类的定义:

//定义Point类,构造器带有两个参数

class Point(var x: Int, var y: Int) {

//无返回值的类方法

def move(dx: Int, dy: Int): Unit = {

x = x + dx

y = y + dy

}

//没有参数但是返回值为String类型的重写方法

override def toString: String =

s"($x, $y)"

}

//创建类的实例

val point1 = new Point(2, 3)

point1.x // 2

println(point1) // prints (2, 3)

构造器可以带有默认值:

class Point(var x: Int = 0, var y: Int = 0){

...

}

val origin = new Point // x, y都取默认值0

val point1 = new Point(1)//x=1,y=0

println(point1.x) // prints 1

私有成员变量以及重新定义的Getter/Setter方法:

private var _x = 0

private var _y = 0

private val bound = 100

def x = _x

def x_= (newValue: Int): Unit = {

if (newValue < bound) _x = newValue else printWarning

}

def y = _y

def y_= (newValue: Int): Unit = {

if (newValue < bound) _y = newValue else printWarning

}

private def printWarning = println("WARNING: Out of bounds")

}

val point1 = new Point

point1.x = 99

point1.y = 101 // prints the warning

类定义中的其他细节:

//在Scala中,类并不用声明为public。

//Scala源文件中可以包含多个类,所有这些类都具有公有可见性。

class Person {

//用val修饰的变量是只读属性的,只带getter方法但没有setter方法

//(相当与Java中用final修饰的变量)

//字段必须初始化

val id = "1234"

//用var修饰的变量,默认同时有公开的getter方法和setter方法

var age: Int = 18

//类私有字段,有私有的getter方法和setter方法,只能在类的内部使用

private var name: String = "王老五"

//对象私有字段,访问权限更加严格的,Person类的方法只能访问到当前对象的字段

private[this] val hobby = "旅游"

}

scala中,在实现属性时你有如下四个选择:

(1) var foo: Scala自动合成一个getter和一个setter

(2) val foo: Scala自动合成一个getter

(3) 由你来定义foo和foo_=方法

(4) 由你来定义foo方法

1.2. 构造器

注意:

(1) 主构造器会执行类定义中的所有语句

(2) 主构造器如果有参数直接放置在类名之后

class ConstructorDemo ( val id: Int ) { … }

(3) 主构造器变成私有的,可以像这样放置private关键字:

class ConstructorDemo private ( val id: Int ) { … }

此时,用户必须通过辅助构造器来构造Person对象

class ConstructorDemo {

private var var1 = ""

private var var2 = 0

//辅助构造器1

def this(var1:String) {

this() //调用主构造器

this.var1 = var1

}

//辅助构造器2

def this(var1:String, var2:Int) {

this(var1) //调用辅助构造器1

this.var2 = var2

}

}

本文为原创文章,如果对你有一点点的帮助,别忘了点赞哦!比心!如需转载,请注明出处,谢谢!

scala java抽象理解_Scala之类、特质和抽象类相关推荐

  1. scala java抽象理解_Scala学习笔记(五) 抽象类以及类中的一些语法糖

    1. 抽象类 Scala 的抽象类跟Java的一样,不能被实例化. 1.1抽象字段 抽象类中,变量不使用就无需初始化,可以等到子类继承时再进行初始化. scala> abstract class ...

  2. scala java抽象理解_scala – 抽象覆盖如何在Java代码方面起作用?

    它来了: 它简短,抽象覆盖def m()允许从方法调用super.m()并且当一个特征在所有其他类型之后混合时,这个超级调用动态地代替类型创建,例如 trait Printer { def print ...

  3. scala java抽象理解_Scala - 抽象类型和隐式参数解析

    我正在使用Scala 2.10.4 . 请详细说明一下 - 实际的代码深深地嵌入了一个复杂的程序中,所以我不会解释这个问题,而是以时间的方式抽象出问题来讨论动物;-) 在scala我有两个特征 - 例 ...

  4. java抽象机制_Java很好学:接口+抽象类+事件监听机制

    接口?抽象类? 首先知道知道下接口.抽象类的概念 接口:只含有常量和抽象方法(只有方法名和参数不含方法体的方法) 抽象类:可以定义常量和抽象方法(和接口一样),还可以定义变量和普通方法和构造方法(和一 ...

  5. scala特质_Scala的特质

    scala特质 Scala特质 (Scala traits) Traits in Scala are like interfaces in Java. A trait can have fields ...

  6. scala java混合_Scala特性混合

    scala java混合 Scala | 特性混合 (Scala | Trait Mixins ) In Scala, the number of traits can be extended usi ...

  7. java抽象和接口的理解_Java接口实现与抽象类的区别理解 | 彬菌

    版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创! 恰饭广告 接口:接口是抽象方法的集合.接口通常以interface来声明. 接口注意事项: 1.严格来说,接口是用来实现(i ...

  8. scala面向对象基础---类继承和特质

    一.类继承 传送门:Scala基础-类继承 Scala的类继承 调用超类的构造方法 重写超类的成员 3.1.不被继承的成员 3.2.不可重写的成员 3.3.无参方法与字段 子类型多态与动态绑定 抽象类 ...

  9. 从Java代码到Java堆理解和优化您的应用程序的内存使用

    从Java代码到Java堆理解和优化您的应用程序的内存使用 简介: 本文将为您提供 Java? 代码内存使用情况的深入见解,包括将 int 值置入一个Integer 对象的内存开销.对象委托的成本和不 ...

最新文章

  1. Vue安装配置以及入门案例
  2. c 取地址 虚拟地址 物理地址_通过linux0.11源码理解进程的虚拟地址、线性地址、物理地址...
  3. 对于“网站快照”的认识你停留在哪个阶段?
  4. 如何在SAP的Screen中编写List报表
  5. SecureCRT突然假死的问题(Ctrl+S)
  6. 买卖股票的最佳时机Python解法
  7. 大众点评账号业务高可用进阶之路
  8. Spring Boot教程(十六):Spring Boot集成shiro
  9. 统计学习方法---牛顿法
  10. git命令行删除远程文件
  11. adb命令查看手机上的APP包名和启动activity
  12. linux 系统添加字体,linux服务器下添加字体
  13. 独到科技CEO:十年扎根社交数据,用AI技术帮助企业更好服务消费者
  14. c++ insert
  15. no identity-based policy allows the cloudformation:CreateStack action
  16. day9-字符串和集合作业
  17. 违反唯一约束条件 ORA-00001
  18. 苹果开放降级_为什么不开放 iOS 降级验证通道?
  19. Springboot实验室自主预约系统毕业设计源码111953
  20. GK309协议电子工牌数据模拟器+Socket数据发送 JAVA版-源码

热门文章

  1. 在加州最古老的监狱教课是种什么样的体验?
  2. 达摩院里的女Leader,一面温柔似水一面灿烂如阳
  3. 全球云端数据仓库领导者 MaxCompute 将于本月10日正式开服美东节点
  4. Chrome 96 又更新了 5 个巨巨巨好用的功能
  5. 向下一代互联网迈进 声网发布全链路加速FPA为互联网增加QoS保障
  6. 刷爆了!李彦宏:这类程序员我给100万!你怎么看?
  7. 病历智能处理引擎的架构设计、实现和应用
  8. h5 history
  9. 并联串联混合的电压和电流_高考物理常考实验之电流表改装电压表怎么串联电阻...
  10. mysql的json函数与实例_Mysql实例详解Mysql中的JSON系列操作函数