从零开始学Scala系列(六)之类(Classes)和对象(Objects)
来源:互联网 发布:vue.js blog 编辑:程序博客网 时间:2024/06/03 23:39
1. scala Classes类
scala中的类有以下几种元素(和java中的类有点类似):
类(class),属性(field),方法(method)
来个简单的例子
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
在上面的例子中 定义了一个Animal类,其中有两个属性 , 分别是val(相当于java中的final)类型的name 和var(普通变量)类型的age。还定义一个eat方法
当方法体内只有一行代码时,可以省略大括号{}, 重写了toString方法 scala中所有的类都有一个顶层父类scala.Any和java中的java.lang.Object类似。下面贴一下Any的源码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
scala中的类可以带上类参数使得代码更简洁 可以改写一下Animal的代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
当然类参数还可以有默认值 就是当不传该参数的时候使用默认值 如下
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
scala中还有一种单例对象,上面的object Main就是一个单例对象, scala中类还可以有一个伴生单例对象 而且它们彼此之间都可以相互访问自己的属性或方法 尽管可能是private的[说明: scala中没加修饰符的属性或方法都是public的], scala中的属性或方法都没有static类型的,要想定义此类型可在伴生对象中定义。如下代码所示:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
上面的object Animal就是类Animal伴生的单例对象,其中定义的属性和方法都是static的
2. scala 修饰符(modifiers)
scala中的修饰有private, protected两种,未加修饰符的就是public范围的。
1,private只能在本类中访问和java中private差不多,但是不同的是scala中的外部类不能访问内部类的private修饰的属性或方法, 但是也有手段来实现想java中的private的效果。来看代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
使用private[Outer]指定修饰符范围:就是在Outer这个类的范围内就可以访问, 看代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2, protected 修饰符
先来对比下scala和java中protected的范围
java中 protected修饰范围: 所有的子类和在同一包下的类
scala中 protected修饰范围: 所有子类
看来还是不同的 但是在scala中还是可以实现在java中的效果。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
scala中不仅可以向java那样package在文件的头部, 也可以像上面的代码一样定义package
比如
- 1
- 2
- 3
- 4
- 5
- 6
好了 再次回到protected修饰符的问题上 如何在scala中实现protected在java中的效果,看代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
现在来详细看看scala中的修饰符的范围定义问题 只能说非常灵活
- 1
包对象 package object 所有包内类 对象均可以访问该对象定义的属性和方法
- 1
- 2
- 3
- 4
- 从零开始学Scala系列(六)之类(Classes)和对象(Objects)
- 从零开始学Scala系列(六)之类(Classes)和对象(Objects)
- Scala之类和对象
- scala学习之类和对象
- scala基础之类和对象
- Classes and objects(类和对象)
- Classes and Objects :类和对象(1)
- Classes and Objects :类和对象(2)
- 从零开始学Scala系列(二)之初识Scala
- 从零开始学Scala系列(二)之初识Scala
- 从零开始学Scala系列(五)之集合2--Set和Map
- 从零开始学Scala系列(五)之集合2--Set和Map
- 02-03.类和对象 Classes and Objects
- 一步一步学java之类和对象
- 从零开始学Scala系列(三)之初识循环分支结构
- 从零开始学Scala系列(四)之数组集合1
- 从零开始学Scala系列(三)之初识循环分支结构
- 从零开始学Scala系列(四)之数组集合1
- hdu 1238 暴力枚举+STL
- SurfaceView及TextureView
- mysql 用户管理和权限设置
- Github上bitcoin的CPU挖矿程序部署编译
- virt-install could not open disk image
- 从零开始学Scala系列(六)之类(Classes)和对象(Objects)
- HDU1016简单DFS 素数圈
- Setup NGINX, PHP-FPM, and MariaDB on Debian 8
- climits 头文件
- 动作游戏小demo
- 【cogs728】【网络流24题】最小路径覆盖问题
- VISUAL Studio2013提示malloc是未定义的标识符
- 直方图匹配
- JAVA设计模式之策略模式