大数据Scala系列之类
大数据Scala系列之类
- 类的定义
Scala 访问修饰符基本和Java的一样,分别有:private,protected,public。
如果没有指定访问修饰符符,默认情况下,Scala 对象的访问级别都是 public。
私有(Private)成员
用 private 关键字修饰,带有此标记的成员仅在包含了成员定义的类或对象内部可见,同样的规则还适用内部类。
class Outer{
class Inner{ private def f(){println("f")} class InnerMost{ f() // 正确 } } (new Inner).f() //错误
}
(new Inner).f( ) 访问不合法是因为 f 在 Inner 中被声明为 private,而访问不在类 Inner 之内。
但在 InnerMost 里访问 f 就没有问题的,因为这个访问包含在 Inner 类之内。
Java中允许这两种访问,因为它允许外部类访问内部类的私有成员。
保护(Protected)成员
在 scala 中,对保护(Protected)成员的访问比 java 更严格一些。因为它只允许保护成员在定义了该成员的的类的子类中被访问。而在java中,用protected关键字修饰的成员,除了定义了该成员的类的子类可以访问,同一个包里的其他类也可以进行访问。
package p{
class Super{
protected def f() {println("f")} } class Sub extends Super{ f() } class Other{ (new Super).f() //错误 }
}
类的定义示例:
//定义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中,在实现属性时你有如下四个选择:
var foo: Scala自动合成一个getter和一个setter
val foo: Scala自动合成一个getter
由你来定义foo和foo_=方法
由你来定义foo方法
- 构造器
注意:
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
}
}
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何描述软件开发需求?具体有哪些问题?
业务需求,是标志组织或客户高层次的额目标,业务需求通常来自项目投资人,购买产品的用户,实际用户的管理者,市场营销部门或产品策划部门,业务需求描述了组织为什么要开发一个系统,即组织希望达到的目标,使用前景或范围文档来记录业务需求,这份文档有时也被称作项目轮廓图或市场需求用户需求是描述用户的目标,或用户要求系统必须完成的任务,场景描述,事件一响应表都是表达用户需求的有效途径,也就是说用户需求描述了用户能使用系统来做些什么操作。功能需求是规定开发人员必须在产品中实现软件功能,用户利用这些功能来完成任务,满足业务需求,功能需求有时也被称作为需求,因为习惯上总是用“应该”对其进行描述:“系统应该发送电子邮件来通知用户已接收其预定”功能需求描述对开发人员需要实现什么。1.要做一个什么样的系统2.系统要在什么样的环境下进行在设计新系统的同时必须
- 下一篇
优麒麟 19.10 软件商店,全新改版,化繁为简
上周,优麒麟(Ubuntu Kylin)开源操作系统最新版本 19.10(版本代号 Eoan Ermine )正式发布。此次发布的优麒麟 19.10 版本,默认集成全新升级的软件商店,界面更美观,软件更全面。下面就和小编一起走进全新的软件商店吧! 全新的启动动画 不知道大家是否注意到,此次改版的软件商店更新了启动动画,全新的启动动画给用户带来了更多的乐趣和新鲜感。点击开始菜单中的“麒麟软件商店”,启动加载时,屏幕中央会展示出全新设计的启动动画。 全新的软件界面 麒麟软件商店进行了全面的改造升级,导航和布局进行了重新设计实现,使软件安装、升级和卸载操作更加直观便捷。针对习惯使用 Windows 系统的用户,设置了“Win 替换”分类,列举与 Windows 上相对应的软件包,方便用户更快速的定位到所需的安装包。 软件安装 接下来小编将以下载“国际象棋”软件为例来详细介绍如何使用软件商店。 1)从开始菜单中打开麒麟软件商店。 2)找到“国际象棋”这款软件,由于软件商店软件数量庞大,我们可以通过搜索功能进行查找,在左上角的搜索框中输入您需要安装的软件名,按回车即可。 3)在搜索结果中,选择您...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境