Scala入门小纸条(2)

101. 只有主构造器可以调用超类的主构造器。主构造器调用超类构造器,辅助构造器调用主构造器,不能跨越。scala也用super来调用超类的方法

102. scala重写非抽象方法必须用override;除了方法,scala也能重写字段

103. 特质是将java接口变为更加通用的scala概念

104. 判断是某个类的对象,而不是子类,可用如p.getClass==classOf[Employee],其中classOf方法在scala.Predef被定义,会被自动引入 

105. 与类型检查和转换相比,模式匹配是更好的选择

106. scala也有protected修饰符,但与java不同,它对于类所属的包是不可见的,可以用包修饰符来获取可见性

107. protected[this]、private[this]、protected[类名/包名]、private[类名/包名]都是常见的修饰符

108. scala类/特质/对象可以继承和扩展java类

109. scala的final在修饰类时,和java一样,都表示不能被扩展。在修饰方法时,也和java一样,都表示不能被重写。但在修饰字段时,稍有区别,在java中表示不可变,同时不能被重写;但在scala中只表示不能被重写,要想不可变,要加上val,否则var就是可变的

110. val也可以重写抽象的def;注意,def修饰字段不带参数,这与修饰函数不同;还有一种理解,def就是修饰方法,只不过这里用字段(指val)来重写方法(指def)

111. def只能重写另一个def;val只能重写另一个val或不带参数的def;var只能重写抽象的var 

112. 用var不如用def,特别是需要在子类中扩展它时,因为var没得选,所有子类只能被动接受

113. scala的抽象方法不需要用abstract修饰,只需要省去方法体即可;子类重写超类的抽象方法,不需要override关键字;抽象字段是指没有初始值的字段;和方法一样,子类中重写超类的抽象字段,也不需要override关键字

114. 提前定义语法,让你在超类的构造器执行之前初始化子类的val字段,具体类似class  Ant  extends {override val range=2} with Creature,注意,提前定义只能引用之前已经定义的字段或方法 

115. 可以用-xcheckpoint编译器标志来调试构造顺序的问题。构造顺序问题的根本原因在于,jvm语言的一个设计决定,即允许超类的构造方法调用子类的方法

116. scala继承层级中,AnyVal和AnyRef都继承Any;Any是根节点,而Any又扩展了Nothing特质,Any类定义了isInstanceof和asInstanceof方法

117. AnyVal是所有基本类型和Unit的根节点,而AnyRef是所有其他类的父类,AnyRef等价于java中的Object;AnyRef添加了带参数的synchronized方法,该方法等价于java中的同步块,当然它也包括Object类的wait、notify/notifyAll

118. Nothing是所有类型的子类型,而Null是所有引用类型的子类型

119. Null类型的唯一实例是null;可以将null赋值给任何引用,但不能给值类型,比如将Int设为null是错误的

120. Nothing类型没有实例,它在泛型结构时被用到;Nothing和java中的void是两个概念,scala中void用Unit表示,且Unit只有一个值,就是(),且Unit不是任何其他类型的超类型(Nothing除外)

121. 所有scala类都实现ScalaObject这个特质或标记接口,且ScalaObject接口没有任何方法;注意:有些书上说ScalaObject扩展自AnyRef,而有的书认为二者独立(我倾向这种)

122. 在我安装的scala中AnyRef的源码是  val AnyRef = new Specializable { override def toSt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值