重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

Scala程序中的扩展类是什么

这篇文章主要讲解了“Scala程序中的扩展类是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Scala程序中的扩展类是什么”吧!

为嘉峪关等地区用户提供了全套网页设计制作服务,及嘉峪关网站建设行业解决方案。主营业务为成都网站设计、成都网站建设、嘉峪关网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

我们仍然需要能够创建新的元素对象。你已经看到了因为类Element是抽象的,所以“new Element”不能被用来做这件事。因此,为了实例化一个元素,我们需要创建扩展了Element并实现抽象的contents方法的子类。代码10.3展示了一种可能的方式:

class ArrayElement(conts: Array[String]) extends Element {   def contents: Array[String] = conts  }

代码 10.3 定义ArrayElement为Element的子类

类ArrayElement定义为扩展了类Element。就好象Java里,你在类名之后使用extends子句那样:

... extends Element ...

这种extends子句有两个效果:使类ArrayElement从类Element继承所有非私有的成员,并且使ArrayElement成为Element的子类型。由于ArrayElement扩展了Element,类ArrayElement被称为类Element的子类。反过来,Element是ArrayElement的超类。

如果你省略extends子句,Scala编译器隐式地假设你的类扩展自scala.AnyRef,在Java平台上与java.lang.Object一致。因此,类Element隐式地扩展了类AnyRef。

继承:inheritance表示超类的所有成员也是子类的成员,除了以下两点。

首先,超类的私有成员不被子类继承。其次,在子类中实现的与超类中的成员具有相同名称和参数的将不被继承到子类中。这种情况我们说子类的成员重载:override了超类的成员。如果子类中的成员是具体的而超类中的是抽象的,我们还可以说具体的成员实现:implement了抽象的。

例如,ArrayElement的contents方法重载(或者可说成:实现)了类Element的抽象方法contents。这个设计的一个漏洞是因为返回数组是可变的,所以客户端能改变它。本书中我们希望事情尽量简化,但当ArrayElement是真实项目中的部分时,你应当考虑代之以返回一个数组的防御性拷贝。另一个问题是我们现在并不确信contents数组所有的String元素具有同样的长度。这可以通过在主构造器中检查前提条件,并且一旦违反则抛出异常的方式来解决。相对的,类ArrayElement从类Element继承了width和height方法。例如,给定ArrayElement的一个对象ae,你可以使用ae.width查询其长度,就好象width是定义在类ArrayElement中一样:

scala> val ae = new ArrayElement(Array("hello", "world"))  ae: ArrayElement = ArrayElement@d94e60 scala> ae.width  res1: Int = 5

子类型化:subtyping是指子类的值可以被用在需要其超类的值的任何地方。例如:

val e: Element = new ArrayElement(Array("hello"))

变量e被定义为类型Element,所以其初始化的值也应当是Element。实际上,初始化值的类型是ArrayElement。这也没问题,因为类ArrayElement扩展了类Element,并且因此,类型ArrayElement适用于类型Element。
存在于ArrayElement和Array[String]之间的组合:composition关系。这种关系被称为组合的原因是由于类ArrayElement是被Array[String]“组合”出来的。因此Scala编译器将在它为ArrayElement产生的二进制类中安置一个字段用来保留传入的conts数组的引用。

感谢各位的阅读,以上就是“Scala程序中的扩展类是什么”的内容了,经过本文的学习后,相信大家对Scala程序中的扩展类是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


文章标题:Scala程序中的扩展类是什么
分享URL:http://cqcxhl.com/article/gijjdh.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP