在Scala中定义final成员

设计一个继承层级的某些时候,你想要确保成员不被子类重载。Scala里和Java里一样,通过添加 final修饰符给成员来做到。例如,你可以在ArrayElement的demo方法前放一个final修饰符,如代码 10.7中展示的那样。

class ArrayElement extends Element { final override

 def demo() {  println("ArrayElement's implementation invoked") }}

代码 10.7 声明final方法

有了这个版本的 ArrayElement,尝试在它的子类,LineElement,重载demo方法,将编译不过:

elem.scala:18: error: error overriding method demoin class 

ArrayElement of type ()Unit;method demo cannot override final memberoverride def demo() {ˆ

你或许还多次想确保整个类都没有子类。 要做到这点只要简单地通过在类的声明上添加final修饰符把整个类声明为final即可。如,代码10.8展 示了如何声明ArrayElement为final:

final class ArrayElement extends Element 

{ override def demo() {  println("ArrayElement's implementation

 invoked")   }}  

代码 10.8 声明final类

有了 这个版本的ArrayElement,任何定义子类的尝试都将失败:

elem.scala: 18: error: 

illegal inheritance from final class ArrayElement  class LineElement 

extends ArrayElement {ˆ

我们现在将去掉final修饰符和demo方法,并回 到早先实现的Element家族。我们将把我们本章剩余部分的注意力集中在完成布局库的工作版本上。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索class
, final
, 方法
, 代码
, 子类
demo
scala final、scala final 关键字、scala final val、scala 成员变量、scala 类成员变量,以便于您获取更多的相关知识。

时间: 2024-10-03 15:23:22

在Scala中定义final成员的相关文章

c++-明明在类中定义了成员,为什么找不到标识符?

问题描述 明明在类中定义了成员,为什么找不到标识符? 类定义如下: class HelloWorld : public cocos2d::Layer { private: Sprite *beijing; Sprite *cangshu; Sprite *guazi1; public: // there's no 'id' in cpp, so we recommend returning the class instance pointer static cocos2d::Scene* cre

在Scala中定义无参数方法

作为下一步,我们将向Element添加显示宽度和高度的方法,展示在代码10.2中.height方法返回 contents里的行数.width方法返回第一行的长度,或如果元素没有行记录,返回零.(也就是说你不能 定义一个高度为零但宽度不为零的元素.) abstract class Element { def contents: Array[String] def height: Int = contents.length def width: Int = if (height == 0) 0 el

无需指定成员变量-VB2013中定义类型定义问题

问题描述 VB2013中定义类型定义问题 如何在VB2013中定义不需要指定成员变量就可以直接赋值的类型,例如 Dim Num as Integer Num = 100 在结构中如何具体实现 Friend Structure Num1 具体代码如何写End Structure 在自定义代码中具体写法: Dim Num as Num1Num = 100 谢谢了

c++-C++类的私有成员中定义了一个数组,怎么在构造函数中初始化这个数组?

问题描述 C++类的私有成员中定义了一个数组,怎么在构造函数中初始化这个数组? 写了这样一个类: class Base{ private: int r[MAX_SIZE]; int length; public: Base() { r[MAX_SIZE] = {1,2,0,5,8,9,7,3,6,4}; //编译的时候在这边出错 length = 10; } void swap_data(int,int); void Show(const Base &ob); friend int Bubble

c++的问题-C++类中定义 const static 成员变量为啥在VC++6.0中 编译不过

问题描述 C++类中定义 const static 成员变量为啥在VC++6.0中 编译不过 class GradeBook { public: //constant -- number of students who took the test const static int students = 0; //constructor initialize course name and array of grades GradeBook( string, const int [] ); voi

VC2005中如何定义指针成员变量 新手 在线

问题描述 新手求教如何定义指针成员变量,属性设置里该怎么写呢?VC6.0里面的好像无法识别.多谢~

Scala中的类

阅读<Programming in Scala>,整理Scala类.继承.重载相关的一些知识点. 类 Scala使用class来定义类. class Counter { private var value = 0 // 必须初始化字段 def increment() { value += 1 } // 方法默认公有 def current() = value //空括号方法 } Scala中的类不能声明为public,一个Scala源文件中可以有多个类. 类的初始化和调用: val myCou

Java中的final

这几天,在网上找了一些关于final的知识,当然并不全面,有的一时也没有很好的理解,先收集起来,理理思路,把不懂的画出来,以便更好地学习-- Java中的final关键字通常的指的是"这是无法改变的".它可能被做为三种的修饰词.------数据(基本类型,对象或者数组),方法(类方法.实例方法),类. <1>final应用于类 如果类被声明为final,则表示类不能被继承,也就是说不能有子类.因为不能有子类,所以final类不能被声明为abstract抽象类.所以final

浅析Java中的final关键字

谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法.下面是本文的目录大纲: 一.final关键字的基本用法 二.深入理解final关键字 若有不正之处,请多多谅解并欢迎指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/dolphin0520/p/3736238.html 一.final关键字的基本用法 在J