scala笔记(三)

原创 2016年05月30日 21:22:06

1.Scala和Java的互操作性
互操作涉及两个方面,一是Scala访问Java;二是Java访问Scala。我们只是看前者,后者使用的比较少,支持也不完整,也没有多少意义。
Scala的类继承结构图:

这里写图片描述

Scala的AnyRef等价于Java的Object。
需要注意的是Nothing和Null,它们是类型的下限。这在其他面向对象的语言里面是没有的。
在Scala里面使用Java是非常顺畅的。因为存在Scala到Java的直接映射。Java的class在Scala里面还是class。Java的interface在Scala里面是trait。Java的静态成员在Scala里面是object。Scala的包包含的使用方法,不管包含Scala包还是Java包,都可以像Java那样使用。

2.scala访问修饰符
包,类或对象的成员可以标记访问修饰符private和protected,如果我们不使用这两种关键字,那么访问将被默认设置为public。这些修饰限制为成员的代码的某些区域访问。
2.1private:私有成员只能看到里面包含的成员定义的类或对象,如:

classOuter{classInner{privatedef f(){ println("f")}classInnerMost{
         f()// OK}}(newInner).f()// Error: f is not accessible}

2.2protected:受保护的成员是从该成员定义的类的子类才能访问

package p {classSuper{protecteddef f(){ println("f")}}classSubextendsSuper{
      f()}classOther{(newSuper).f()// Error: f is not accessible}}

2.3未标示私有或受保护的每一个成员是公开的。不需要明确使用修饰符public。这样的成员可以从任何地方访问

classOuter{classInner{def f(){ println("f")}classInnerMost{
         f()// OK}}(newInner).f()// OK because now f() is public}

2.4保护范围:Scala中的访问修饰符可以增加使用修饰符。形式:private[X]或protected[X]的修饰符意味着访问私有或受保护“达到”X,其中X代表了一些封闭的包,类或单个对象。考虑下面的例子:

package society {package professional {classExecutive{private[professional]var workDetails =nullprivate[society]var friends =nullprivate[this]var secrets =nulldef help(another :Executive){
            println(another.workDetails)
            println(another.secrets)//ERROR}}}}

注意,上面的例子中以下几点:
变量workDetails将可对任何一类封闭包professional范围内。
变量friends 将可对任何一类封闭包society中。
变量secrets 将可只在实例方法隐含的对象(this)。
3.对于类的字段,val类型对应有getter方法没有setter方法,var类型既有getter方法又有setter方法,注意scala中没有只写属性,其中这些方法scala一般会自动生成,也可以自己去定义。假如有age字段,系统一般自动生成age()和age_=()方法,即为getter和setter方法,其中age_=()方法,java会翻译为age_$eq(),因为java中方法不允许=出现。

3.scala关键字
Java关键字
Java一共有50个关键字(keywords),其中有2个是保留字,目前还不曾用到:goto和const。true、false和null看起来很像关键字,但实际上只是字面量而已。本文粗略的把true、false和null也看做Java关键字,认为Java一共有53个关键字。下面是大致归类的Java关键字列表:
assert
boolean, byte, short, char, int, long, float, double, void
package, import, class, interface, enum, implements, extends
public, protected, private, abstract, static, final, volatile, transient, synchronized, strictfp, native
try, catch, finally, throw, throws
if, else, do, while, for, switch, case, default, break, continue, return
super, this
new, instanceof
const, goto
true, false, null

Scala关键字
Scala只有39个关键字:
package, import, class, object, trait, extends, with, type, forSome
private, protected, abstract, sealed, final, implicit, lazy, override
try, catch, finally, throw
if, else, match, case, do, while, for, return, yield
def, val, var
this, super
new
true, false, null

4.主构造器和辅助构造器
辅助构造器的名称为this,必须以一个对先前已经定义的其他辅助构造器或主构造器的调用开始,如果一个类没有显示定义主构造器,则自动拥有一个无参的主构造器;
在scala中,每个类都有主构造器,主构造器并不以this方法定义,而是与类定义组织在一起。主构造器的参数直接放置在类名之后,主构造器的参数被编译成字段,其值初始化为构造时传入的参数。主构造器会执行定义类的所有语句。在主构造器中可以使用默认参数来避免过多地使用辅助构造器。如果想让主构造器变为私有,可以类名后面参数之前放入private关键字:如class C private(args){}

5.在scala中,你几乎可以在任何语法结构中内嵌任何语法结构,你可以在函数中定义函数,在类中定义类。

6.与对象与类的定义不同,同一个包可以定义在多个问个文件文档中,不同的包也可以定义在一个文件文档中。
包和其他作用域一样地支持嵌套,你可以访问上层作用域中的名称;包名是相对路径,不是java的绝对路径,所以容易产生编译错误,解决办法使用root.开始的包名,表示使用绝对包名。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

快学Scala笔记(三)

Scala是一门多范式的编程语言,一种类似java的编程语言,Scala编程语言抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了...

Scala学习笔记(三)类层级和特质

无参方法 功能:将方法的定义转换为属性字段的定义; 作用范围:方法中没有参数,并且方法仅能通过读取所包含的对象属性去访问可变状态,而不改变可变状态,就可使用无参方法; 例子: abstract...

Scala School 笔记(三)--模式匹配与函数组合

函数组合 让我们创建两个函数: scala> def f(s: String) = "f(" + s + ")" f: (String)java.lang.String scala> def g(...

Scala学习笔记(三)Actor简单例子

在了解了Scala的一些基本特性之后,看到了它的线程实现:Actor。笔者不知道这么叫是否合适,因为Actor的目的似乎专注于在实体之间使用消息传递来协作。翻了一下它的原型定义如下: abstrac...
  • Ant_Yan
  • Ant_Yan
  • 2012年02月11日 14:45
  • 2040

scala学习笔记

  • 2016年04月13日 11:44
  • 9KB
  • 下载

Scala编程_学习笔记

  • 2016年12月18日 19:16
  • 4.71MB
  • 下载

Scala学习笔记(3)

Scala中的OOPScala是一门同时具有函数式与面向对象特性的多重范式的语言,除了具有函数式特性外,对OOP也有着完整的支持。...

scala学习笔记1-泛型、界定、形变、this.type、复合类型、抽象类型

泛型、界定、形变、this.type、复合类型、抽象类型
  • sucabit
  • sucabit
  • 2015年11月23日 22:40
  • 1861

Scala学习笔记(五) - 控制语句

与其他的C类语言一样,Scala中也有一些常用的控制语句,与其他语言不一样的是,这些控制语句也产生返回值,听着很神奇?确实是 if 语句 与其他语言是一样的,判断一个条件是否为真,并执行其中的一条...
  • expt
  • expt
  • 2012年08月02日 15:37
  • 4913
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:scala笔记(三)
举报原因:
原因补充:

(最多只允许输入30个字)