`
fushengxu
  • 浏览: 17319 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

转:scala override的学习总结

阅读更多
1) 可以用override val  覆盖父类或trait中不带参数的def , 但反过来不行, 既不可以用override def 覆盖父类的val,比如

class Father{
    def name = "Archer"
    def score() = 1.0
    val id = 12
}

class Children extends Father{
    override val name = "Jack"
    override val score  = 2.0
    override def id = 10  // error: error overriding value id in class Father of type Int; method id is not stable
}

个人认为这条规则可以这么记忆,因为def表示一个函数,函数返回值都有一个确定的范围,比如上面的name函数,它的返回值范围是全体的字符串,由于val 表示一个常量,值的范围已经却确定,因此如果子类要覆盖父类的同名成员,其值的范围不能更宽泛, 否则就破坏了里氏代换原则。显然, def 所蕴含的范围要比 val 广(注: 这段话是我瞎说,只是方便记忆)

2.  子类的def 可以 override 父类的def, 比如

class Father{
    def name = "Archer"
    def say() = "go to bed"
    def moveTo(x: Int, y: Int) = println("move to ("+x+","+y);
}

class Children extends Father{
   override def name() = "Jack"
   override def say() = "I'm not tired"
   override moveTo(x: Int, y: Int) = super.moveTo(x,y)
}

3. 子类的var要override 父类的def 成员 , 不过def 必须成对出现;但反过来不行

class Father{
    def credit = "abc"
    def credit_=(s: String) = (println("s"))
}

class Children extends Father{
    override var credit = "fff"   //  var can override  a dual def
}
分享到:
评论

相关推荐

    Scala详细总结(精辟版++)

    ### Scala详细总结 #### 概述 Scala是一种静态类型的编程语言,其设计旨在结合面向对象编程和函数式编程的优点,并且能在Java虚拟机(JVM)上运行。这意味着Scala能够充分利用现有的Java类库,并且能够与Java代码无缝...

    protoless:Scala的Protobuf序列化库

    **Protoless:Scala的Protobuf序列化库** `Protoless` 是一个专为 Scala 设计的 Protocol Buffers(Protobuf)序列化库。它旨在提供更简洁、更灵活且更符合 Scala 风格的方式来处理 Protobuf 消息。本文将深入探讨 ...

    scopt:Scala的命令行选项解析

    通过研究这些源代码,你可以深入理解scopt的工作原理,学习如何编写自定义的选项解析逻辑,或者发现新的使用技巧。 总的来说,scopt是Scala开发者的强大工具,可以帮助他们快速构建具有命令行接口的应用程序,同时...

    template.scala:Scala中的C ++风味模板元编程

    `template.scala`文件就是对这一技术的体现,它揭示了如何在Scala中实现类似C++模板的静态代码生成能力。 首先,让我们来理解一下元编程(Metaprogramming)。元编程是在程序运行时或者编译时处理代码的一种方式,...

    lie:Scala 中的李代数

    在编程世界中,Scala是一种强大的、多范式编程语言,它结合了面向对象和函数式编程的概念。在“lie:Scala 中的李代数”这个主题中,我们探讨的是将数学中的李代数理论应用于Scala编程。李代数在数学上是一种抽象代数...

    scala入门--文档版本

    ### Scala入门知识点...通过上述介绍,我们不仅了解了Scala的基本概念、安装配置过程,还学习了如何使用Scala进行基础编程。Scala作为一种结合了面向对象和函数式编程优点的语言,为开发者提供了强大而灵活的工具集。

    快学Scala 课后习题答案集合-中文版

    这个“快学Scala 课后习题答案集合-中文版”涵盖了Scala学习中的关键知识点,包括注解(第十五章)和高级类型(第十八章)等主题。下面将对这些主题进行详细的解释。 **注解(Annotations)** 在Scala中,注解是一种元...

    rock-the-jvm-scala-beginners:Scala和函数式编程课程练习

    在"摇滚jvm-scala初学者"课程中,学员可能会学习到如何使用 Scala 的 Actor 模型进行并发编程,Actor 是 Akka 框架的核心组件,它通过消息传递和状态管理实现线程安全的并行执行。 另外,Scala 还有强大的集合库,...

    CrossCuttingConcern_Scala:在 Scala 中使用面向切面编程 (AOP) 实现横切关注

    总结来说,"CrossCuttingConcern_Scala" 项目可能展示了如何利用 Scala 的库和语言特性来模拟面向切面编程。通过学习和理解这个项目,开发者可以更好地掌握在 Scala 中处理横切关注点的方法,提升代码组织和设计能力...

    Scala编程例子

    通过"Scala编程例子"的学习,初学者可以逐步了解并掌握这些概念,从而在实践中运用Scala的强大功能。压缩包中的"examples"可能包含各种示例代码,涵盖以上提到的知识点,帮助学习者加深理解和应用。

    Scala编程详解 第14讲-Scala编程详解:面向对象编程之继承 共13页.pptx

    总结来说,Scala的继承机制、字段和方法覆盖、类型转换以及类型判断是其面向对象编程的重要组成部分,它们帮助开发者构建复杂且可扩展的软件系统。在Scala中,这些概念与函数式编程相结合,使得编写高性能、易维护的...

    Scala和设计模式.pdf

    书中总结了23种设计模式,这些模式旨在解决软件设计中常见的问题,帮助开发者编写更易于维护和扩展的代码。 尽管设计模式在很多情况下被认为是对编程语言自身局限性的补充,但当语言本身提供了强大的特性时,设计...

    Functional-Programming-Using-Scala:使用 Scala 的函数式编程原则示例。 这些示例有助于理解和学习这些概念

    override def print() = println("MyObject") } ``` ### 6. 函数式数据结构:尾递归 Scala 支持尾递归优化,这允许在处理递归算法时避免栈溢出。在尾递归函数中,递归调用是表达式的最后一个操作,编译器会优化这...

    scala程序设计

    **Scala程序设计** ...通过深入学习和实践,开发者可以充分利用Scala的强大特性和灵活性,解决各种复杂的软件开发问题。提供的链接中的博客文章可能涵盖了这些概念的更多细节和示例,是深入理解Scala的好资源。

    Scala简单说明

    #### 更深入学习Scala 随着对Scala的理解加深,可以探索更多高级主题,如函数式编程的最佳实践、并发模型的深入理解以及Scala生态系统中的各种库和框架。这些知识对于构建复杂的应用程序至关重要。

    scala-2.9.2.jar

    import scala.annotation._ trait Func[T] { val zero: T def inc(t: T): T def dec(t: T): T def in: T def out(t: T): Unit } object ByteFunc extends Func[Byte] { override val zero: Byte = 0 ...

    Scala编程详解 第13讲-Scala编程详解:面向对象编程之对象 共9页.pptx

    Scala是一种强大的多范式编程语言,它融合了面向对象编程和函数式编程的特性,尤其在大数据处理领域中,如Apache Spark,Scala是其主要的编程语言。在本系列讲解中,我们将深入探讨Scala的面向对象编程,特别是关于...

    scala编程基础

    ### Scala编程基础之Actor并发编程 #### 一、Scala Actor并发编程概述 ##### 1.1 什么是Scala Actor 在Scala中,Actor是一种强大的并行编程模型,它基于事件驱动和消息传递机制。通过Actor,我们可以更加简洁和...

    Beginning Scala

    ### Scala基础语法详解 #### 一、Scala简介与特点 ...通过学习《Beginning Scala》,读者不仅能够掌握Scala的基础语法,还能深入了解其背后的编程理念和技术优势,为将来开发高效、可靠的软件系统打下坚实的基础。

Global site tag (gtag.js) - Google Analytics