scala java抽象理解_Scala之类、特质和抽象类
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之类、特质和抽象类相关推荐
- scala java抽象理解_Scala学习笔记(五) 抽象类以及类中的一些语法糖
1. 抽象类 Scala 的抽象类跟Java的一样,不能被实例化. 1.1抽象字段 抽象类中,变量不使用就无需初始化,可以等到子类继承时再进行初始化. scala> abstract class ...
- scala java抽象理解_scala – 抽象覆盖如何在Java代码方面起作用?
它来了: 它简短,抽象覆盖def m()允许从方法调用super.m()并且当一个特征在所有其他类型之后混合时,这个超级调用动态地代替类型创建,例如 trait Printer { def print ...
- scala java抽象理解_Scala - 抽象类型和隐式参数解析
我正在使用Scala 2.10.4 . 请详细说明一下 - 实际的代码深深地嵌入了一个复杂的程序中,所以我不会解释这个问题,而是以时间的方式抽象出问题来讨论动物;-) 在scala我有两个特征 - 例 ...
- java抽象机制_Java很好学:接口+抽象类+事件监听机制
接口?抽象类? 首先知道知道下接口.抽象类的概念 接口:只含有常量和抽象方法(只有方法名和参数不含方法体的方法) 抽象类:可以定义常量和抽象方法(和接口一样),还可以定义变量和普通方法和构造方法(和一 ...
- scala特质_Scala的特质
scala特质 Scala特质 (Scala traits) Traits in Scala are like interfaces in Java. A trait can have fields ...
- scala java混合_Scala特性混合
scala java混合 Scala | 特性混合 (Scala | Trait Mixins ) In Scala, the number of traits can be extended usi ...
- java抽象和接口的理解_Java接口实现与抽象类的区别理解 | 彬菌
版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创! 恰饭广告 接口:接口是抽象方法的集合.接口通常以interface来声明. 接口注意事项: 1.严格来说,接口是用来实现(i ...
- scala面向对象基础---类继承和特质
一.类继承 传送门:Scala基础-类继承 Scala的类继承 调用超类的构造方法 重写超类的成员 3.1.不被继承的成员 3.2.不可重写的成员 3.3.无参方法与字段 子类型多态与动态绑定 抽象类 ...
- 从Java代码到Java堆理解和优化您的应用程序的内存使用
从Java代码到Java堆理解和优化您的应用程序的内存使用 简介: 本文将为您提供 Java? 代码内存使用情况的深入见解,包括将 int 值置入一个Integer 对象的内存开销.对象委托的成本和不 ...
最新文章
- Vue安装配置以及入门案例
- c 取地址 虚拟地址 物理地址_通过linux0.11源码理解进程的虚拟地址、线性地址、物理地址...
- 对于“网站快照”的认识你停留在哪个阶段?
- 如何在SAP的Screen中编写List报表
- SecureCRT突然假死的问题(Ctrl+S)
- 买卖股票的最佳时机Python解法
- 大众点评账号业务高可用进阶之路
- Spring Boot教程(十六):Spring Boot集成shiro
- 统计学习方法---牛顿法
- git命令行删除远程文件
- adb命令查看手机上的APP包名和启动activity
- linux 系统添加字体,linux服务器下添加字体
- 独到科技CEO:十年扎根社交数据,用AI技术帮助企业更好服务消费者
- c++ insert
- no identity-based policy allows the cloudformation:CreateStack action
- day9-字符串和集合作业
- 违反唯一约束条件 ORA-00001
- 苹果开放降级_为什么不开放 iOS 降级验证通道?
- Springboot实验室自主预约系统毕业设计源码111953
- GK309协议电子工牌数据模拟器+Socket数据发送 JAVA版-源码
热门文章
- 在加州最古老的监狱教课是种什么样的体验?
- 达摩院里的女Leader,一面温柔似水一面灿烂如阳
- 全球云端数据仓库领导者 MaxCompute 将于本月10日正式开服美东节点
- Chrome 96 又更新了 5 个巨巨巨好用的功能
- 向下一代互联网迈进 声网发布全链路加速FPA为互联网增加QoS保障
- 刷爆了!李彦宏:这类程序员我给100万!你怎么看?
- 病历智能处理引擎的架构设计、实现和应用
- h5 history
- 并联串联混合的电压和电流_高考物理常考实验之电流表改装电压表怎么串联电阻...
- mysql的json函数与实例_Mysql实例详解Mysql中的JSON系列操作函数