Scala中class和object的区别
1、class
scala的类和C#中的类有点不一样,诸如: 声明一个未用priavate修饰的字段 var age,scala编译器会字段帮我们生产一个私有字段和2个公有方法get和set ,这和C#的简易属性类似;若使用了private修饰,则它的方法也将会是私有的。这就是所谓的统一访问原则。
- //类默认是public级别的
- class Person{
- var age=18 //字段必须得初始化()
- def Age=age //这个是方法,没有参数可以省略()
- def incremen(){this.age+=1}
- }
- class Student{
- var age=20 //底层编译器会自动为私有的age添加get和set的公有方法,可以理解为伪public类型
- private[this] var gender="male" //private[this] 只有该类的this可以使用
- private var name="clow" //声明了private,底层编译器会自动为私有的name添加get和set的私有方法
- //但是可以自己定义属性方法
- def getName=this.name
- def setName(value:String){this.name=value}
- }
- //构造器的使用
- class Teacher {
- var age: Int = _
- var name: String = _ //可以预留
- //重载的构造器和C#里面的public Teacher(){}类似
- def this(age: Int, name: String){
- this() //必须得调用一次主构造器
- this.age=age
- this.name=name
- }
- }
2、scala没有静态的修饰符,但object下的成员都是静态的 ,若有同名的class,这其作为它的伴生类。在object中一般可以为伴生类做一些初始化等操作,如我们常常使用的val array=Array(1,2,3) (ps:其使用了apply方法)
- object Dog{
- private var age=0
- def Age={
- age+=1
- age
- }
- }
- class Dog{
- var age1=Dog.age //Dog.age是object Dog的私有字段。这不禁让我回想起了C++的友元类
- }
3、Apply的使用,怎么解释呢? 还是来看看怎么用它来实现单例模式
- class ApplyTest private{ //添加private隐藏构造器
- def sayHello(){
- println("hello jop")
- }
- }
- object ApplyTest{
- var instant:ApplyTest=null
- def apply() ={
- if(instant==null) instant=new ApplyTest
- instant
- }
- }
- object ApplyDemo {
- def main(args:Array[String]){
- val t=ApplyTest()
- t.sayHello()
- }
- }
Scala中class和object的区别的更多相关文章
- Python中type与Object的区别
Python中type与Object的区别 在查看了Python的API后,总算明白了.现在总结如下: 先来看object的说明: Python中关于object的说明很少,甚至只有一句话: clas ...
- Scala中 => Unit 与 () =>Unit的区别
() => Unit ---> 是一个函数:=> Unit --> 是一个执行结果为Unit的表达式 code: => Unit是 by name 传递参数.参数是一个返 ...
- Scala中==,eq与equals的区别
根据官方API的定义: final def ==(arg0: Any): Boolean The expression x == that is equivalent to if (x eq null ...
- Scala中class、object、case class、case object区别
/** class.object.case class.case object区别 * * class 类似Java中的class: * object Scala不能定义静态成员,用定义单例对象代之: ...
- 【Todo】【转载】Scala中Array, List, Tuple的区别
参考了这篇文章: https://my.oschina.net/u/1034176/blog/512314 1. 在Scala 2.7中,Array.List都不能混合类型,只有Tuple可以:而在S ...
- Scala中None, Nil, Nothing的区别
Nil是一个空的List None是一个object,是Option的子类型 List[Nothing]
- javascript中function和object的区别,以及javascript如何实现面向对象的编程思想.
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- scala中val和var的区别
1:内容是否可变:val修饰的是不可变的,var修饰是可变的 2:val修饰的变量在编译后类似于java中的中的变量被final修饰 3:lazy修饰符可以修饰变量,但是这个变量必须是val修饰的 p ...
- scala中nothing和null的区别
1:nothing是所有类型的子类,他没有具体的实例对象,常见的应用:抛出异常.程序exit.无线循环等. 2:nothing是所有类型的子类,也是null的子类,nothing没有对象,但是可以用来 ...
随机推荐
- bzoj2506
不知道该给这题贴什么标签了,但是这是一道好题1.注意这道题的询问是满足区间减法的,我们可以把一个询问拆成两个询问离线搞搞,这个思想在后面会见到2.分类的思想,这道题的求相同余数看似很烦,实际上我们发现 ...
- [light oj 1013] Love Calculator
1013 - Love Calculator Yes, you are developing a 'Love calculator'. The software would be quite comp ...
- 基于WebForm+EasyUI的业务管理系统形成之旅 -- 首页快捷方式(Ⅲ)
上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 登录窗口>,主要是介绍系统登录界面页面设计与代码. 最近刚做完施工计划安排设计,之后将分享出来,这个系列更新不是很快,望 ...
- FZU 2092 收集水晶 dp+bfs
定义dp[t][x1][y1][x2][y2]为在t时刻,人走到x1,y1,影子走到x2,y2所获得最大价值 最终就是所有的dp[max][..][..][..][..]的最大值 然后递推也很自然,枚 ...
- C#中属性简写原理
1. 属性简写时不能只有get或者set 原因: 如果只有get,那么没有办法给其赋值,所有也就没法get到值: 如果只有set,没有意义,因为根本没法获取到这个值.
- VS2010+WINDBG+VMWARE9.0和fatal error RC1106: invalid option: -ologo错误
提供属性配置文件一份: http://pan.baidu.com/s/1iS1Ix <?xml version="1.0" encoding="utf-8" ...
- 【原】Comparator和Comparable的联系与区别
1.知识点了解 Comparator和Comparable都是用用来实现集合中元素的比较.排序的,所以,经常在集合外定义Comparator接口的方法和集合内实现Comparable接口的方法中实现排 ...
- nyoj 96 一个水题目
虽然很简单,发现自己用内存太高了了,算了,我就是这水平了. 描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数. 输入 第一行为M,表示 ...
- delphi 提取字符中的数字
Function Setstring(cString:string):string; {提取数字} VAr i:integer; str:string; begin str:='' ...
- POJ2192 - Zipper(区间DP)
题目大意 给定三个字符串s1,s2,s3,判断由s1和s2的字符能否组成字符串s3,并且要求组合后的字符串必须是s1,s2中原来的顺序. 题解 用dp[i][j]表示s1的前i个字符和s2的前j个字符 ...