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是一种静态类型的编程语言,其设计旨在结合面向对象编程和函数式编程的优点,并且能在Java虚拟机(JVM)上运行。这意味着Scala能够充分利用现有的Java类库,并且能够与Java代码无缝...
**Protoless:Scala的Protobuf序列化库** `Protoless` 是一个专为 Scala 设计的 Protocol Buffers(Protobuf)序列化库。它旨在提供更简洁、更灵活且更符合 Scala 风格的方式来处理 Protobuf 消息。本文将深入探讨 ...
通过研究这些源代码,你可以深入理解scopt的工作原理,学习如何编写自定义的选项解析逻辑,或者发现新的使用技巧。 总的来说,scopt是Scala开发者的强大工具,可以帮助他们快速构建具有命令行接口的应用程序,同时...
`template.scala`文件就是对这一技术的体现,它揭示了如何在Scala中实现类似C++模板的静态代码生成能力。 首先,让我们来理解一下元编程(Metaprogramming)。元编程是在程序运行时或者编译时处理代码的一种方式,...
在编程世界中,Scala是一种强大的、多范式编程语言,它结合了面向对象和函数式编程的概念。在“lie:Scala 中的李代数”这个主题中,我们探讨的是将数学中的李代数理论应用于Scala编程。李代数在数学上是一种抽象代数...
### Scala入门知识点...通过上述介绍,我们不仅了解了Scala的基本概念、安装配置过程,还学习了如何使用Scala进行基础编程。Scala作为一种结合了面向对象和函数式编程优点的语言,为开发者提供了强大而灵活的工具集。
这个“快学Scala 课后习题答案集合-中文版”涵盖了Scala学习中的关键知识点,包括注解(第十五章)和高级类型(第十八章)等主题。下面将对这些主题进行详细的解释。 **注解(Annotations)** 在Scala中,注解是一种元...
在"摇滚jvm-scala初学者"课程中,学员可能会学习到如何使用 Scala 的 Actor 模型进行并发编程,Actor 是 Akka 框架的核心组件,它通过消息传递和状态管理实现线程安全的并行执行。 另外,Scala 还有强大的集合库,...
总结来说,"CrossCuttingConcern_Scala" 项目可能展示了如何利用 Scala 的库和语言特性来模拟面向切面编程。通过学习和理解这个项目,开发者可以更好地掌握在 Scala 中处理横切关注点的方法,提升代码组织和设计能力...
通过"Scala编程例子"的学习,初学者可以逐步了解并掌握这些概念,从而在实践中运用Scala的强大功能。压缩包中的"examples"可能包含各种示例代码,涵盖以上提到的知识点,帮助学习者加深理解和应用。
总结来说,Scala的继承机制、字段和方法覆盖、类型转换以及类型判断是其面向对象编程的重要组成部分,它们帮助开发者构建复杂且可扩展的软件系统。在Scala中,这些概念与函数式编程相结合,使得编写高性能、易维护的...
书中总结了23种设计模式,这些模式旨在解决软件设计中常见的问题,帮助开发者编写更易于维护和扩展的代码。 尽管设计模式在很多情况下被认为是对编程语言自身局限性的补充,但当语言本身提供了强大的特性时,设计...
override def print() = println("MyObject") } ``` ### 6. 函数式数据结构:尾递归 Scala 支持尾递归优化,这允许在处理递归算法时避免栈溢出。在尾递归函数中,递归调用是表达式的最后一个操作,编译器会优化这...
**Scala程序设计** ...通过深入学习和实践,开发者可以充分利用Scala的强大特性和灵活性,解决各种复杂的软件开发问题。提供的链接中的博客文章可能涵盖了这些概念的更多细节和示例,是深入理解Scala的好资源。
#### 更深入学习Scala 随着对Scala的理解加深,可以探索更多高级主题,如函数式编程的最佳实践、并发模型的深入理解以及Scala生态系统中的各种库和框架。这些知识对于构建复杂的应用程序至关重要。
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是一种强大的多范式编程语言,它融合了面向对象编程和函数式编程的特性,尤其在大数据处理领域中,如Apache Spark,Scala是其主要的编程语言。在本系列讲解中,我们将深入探讨Scala的面向对象编程,特别是关于...
### Scala编程基础之Actor并发编程 #### 一、Scala Actor并发编程概述 ##### 1.1 什么是Scala Actor 在Scala中,Actor是一种强大的并行编程模型,它基于事件驱动和消息传递机制。通过Actor,我们可以更加简洁和...
### Scala基础语法详解 #### 一、Scala简介与特点 ...通过学习《Beginning Scala》,读者不仅能够掌握Scala的基础语法,还能深入了解其背后的编程理念和技术优势,为将来开发高效、可靠的软件系统打下坚实的基础。