Scala学习:调用超类构造器和override修饰符的使用

调用超类构造器

现在你有了两个类组成的完整系统:抽象类Element,和扩展它的具体类 ArrayElement。或许你还在设想其它表达元素的方式。比方说,客户或许想要创造由给定单行字串构成 的布局元素。面向对象编程让使用新数据变体扩展系统变得容易。只要加入子类即可。例如,代码10.6 展示了扩展ArrayElement的LineElement类:

class LineElement(s: String) extends 

ArrayElement(Array(s)) {  
 override def width = s.length  
 override def height = 1 
}

代码 10.6 调用超类构造器

由于LineElement扩展了ArrayElement,并且 ArrayElement的构造器带一个参数(Array[String]),LineElement需要传递一个参数到它的超类的主 构造器。要调用超类构造器,只要把你要传递的参数或参数列表放在超类名之后的括号里即可。例如, 类LineElement传递了Array(s)到ArrayElement的主构造器,把它放在超类ArrayElement的名称后面的括 号里:

... extends ArrayElement(Array(s)) ...

有了新的子类,布局元素的继 承级别现在看起来就像展示在图释10.2中的那样了。

图释 10.2 LineElement的类关系图

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索参数
, array
, 元素
, 子类
, override
构造器
,以便于您获取更多的相关知识。

时间: 2024-09-26 04:21:07

Scala学习:调用超类构造器和override修饰符的使用的相关文章

Java修饰符 abstract,static,final 的区别详解_java

static 表示静态,它可以修饰属性,方法和代码块. 1.static修饰属性(类变量),那么这个属性就可以用类名.属性名来访问,也就是使这个属性成为本类的类变量,为本类对象所共有.这个属性就是全类公有.(共有的类变量与对象无关,只和类有关). 类加载的过程,类本身也是保存在文件中(字节码文件保存着类的信息)的,java会通过I/O流把类的文件(字节码文件)读入JVM(java虚拟机),这个过程成为类的加载.JVM(java虚拟机)会通过类路径(CLASSPATH)来找字节码文件. 类变量,会

scala 学习笔记(04) OOP(上)主从构造器/私有属性/伴生对象(单例静态类)/apply方法/嵌套类

一.主从构造器 java中构造函数没有主.从之分,只有构造器重载,但在scala中,每个类都有一个主构造器,在定义class时,如果啥也没写,默认有一个xxx()的主构造器 class Person { var name: String = _ /** * 从构造器 * @param name */ def this(name: String) = { this //注意:从构造器,必须先调用主构造器 this.name = name; } override def toString = { "

Scala 学习

1.强类型语言 弱类型语言 强类型语言:定义对象或变量时,需要指定其归属类型 一旦一个变量类型确定,它所归属的类型不可再变 弱类型语言:定义变量时不用指定变量类型 在程序运行中,可以改变变量的的归属类型 scala变量定义: var str = "abcd" java: String str = "abcd" 这样写法不是没有指定str的类型,而是没有显式的指定str的类型,它隐式的从变量值中自动判断 显式写法: var str:String = "abc

Scala学习笔记

1类型自动匹配(模式匹配) 2函数是有值的(匿名函数是函数的常态) 递归函数需要指定返回值 3.内部类隶属于外部类的实例本身,而java内部类属于外部类,对外部类的依赖路径依赖 4.object类似于java中的静态内部类 里面的所有成员都是静态的,适用于配置文件 静态都是用来修饰类的内部成员的.比如静态方法.静态成员变量.它唯一的作用就是随着类的加载(而不是随着对象的产生)而产生,以致可以用类名+静态成员名直接获得.这样静态内部类就可以理解了,它可以直接被用 外部类名+内部类名 获得. 5.同

Kotlin学习(四)—— 类和对象,继承,覆盖,抽象类,属性和字段,接口,可见性修饰符,扩展

一.类和对象 1. 类 Kotlin和java的类的声明都是一样的,用class表示,比如 class TestClass { } 如果是空类的话,大括号都可以省了 2.构造函数 一个主构造函数和多个次要函数,主函数在类名后,如 class TestClass { //主函数 class TestClass constructor(firstName: String) { init { print("这里初始化") } } } 如果主构造函数没有任何注解或者可⻅性修饰符,可以省略这个

机器学习(三)--- scala学习笔记

 Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性.    Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点:但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法. 一.sca

调用存储过程时注意要使用output做修饰符

调用存储过程时的注意事项:假如有输出参数,注意要使用output做修饰符. 示例如下: alter proc ABC ( @OutValue nvarchar(20) output ) as set @OutValue='aabbcc' select a,b from ab print @OutValue alter proc ABCV as Declare @OutValuea nvarchar(20) Exec ABC @OutValue=@OutValuea output select @

Swift学习笔记之构造器重载_Swift

与函数一样,方法也存在重载,其重载的方式与函数一致.那么作为构造器的特殊方法,是否也存在重载呢?答案是肯定的. 一.构造器重载概念 Swift中函数重载的条件也适用于构造器,条件如下: 函数有相同的名字: 参数列表不同或返回值类型不同,或外部参数名不同: Swift中的构造器可以满足以下两个条件,代码如下: 复制代码 代码如下: class Rectangle {     var width : Double     var height : Double     init(width : Do

java-声明一个类,可使用的权限修饰符为什么不能用protected和privatr

问题描述 声明一个类,可使用的权限修饰符为什么不能用protected和privatr 声明一个类,可使用的权限修饰符为什么不能用protected和privatr 解决方案 私有的类,不能用,有何意义? 解决方案二: 这是java语法的规定,类的修饰符号有:public 公共类:default 默认包内访问权限(即class前什么都不假):abstract 抽象类: fanal 不能被继承的类: static 静态类: private 只能修饰内部类,一般不推荐使用. 解决方案三: 公开的可以