文档章节

组合与继承之重写方法和字段

柳哥
 柳哥
发布于 2015/08/18 11:02
字数 355
阅读 132
收藏 1

接上篇blog,scala里的字段和方法属于相同的命名空间,这让字段可以重写无参数方法。例如,你可以通过改变ArrayElement类中contents的实现将其从一个方法变为一个字段,而无需修改类Element中contents的的抽象方法定义,如例:

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

object ArrayElement {
    def main(args: Array[String]): Unit = {
        val array = new ArrayElement(Array("dddaaa", "dddww"))
        println(array.contents.length)
    }
}

这个版本的ArrayElement中的contents字段(用val定义)为Element类中的无参数方法contents(用def定义)提供了非常好的实现。

另一方法,scala里禁止在同一个类里用同样的名称定义字段和方法。尽管Java允许这样做。示例,这在scala类将不能通过编译:

class T2 {
    private var f = 0
    def f = 1    //不能编译通过,因为字段和方法重名
}

Java为定义准备了四个命名空间(分别是字段,方法,类型和包)相对,一般来说,scala仅有两个命名空间

  • 值(字段,方法,包还有单例对象)

  • 类型(类和特质名)

scala把字段和方法放进同一个命名空间的理由很明确,因为这样你就可以实现使用val重写无参数方法这种你在Java里做不到的事情。

© 著作权归作者所有

柳哥
粉丝 207
博文 405
码字总数 347782
作品 0
杭州
技术主管
私信 提问
初探设计:Java继承何时用?怎么用?

Writer :BYSocket(泥沙砖瓦浆木匠) 一、回顾继承 常见的如下: 1、依赖(”uses-a“) 2、聚合(”has-a“) 3、继承(”is-a“)类之间关系 也就是UML类图中常见的三种关系,另外常见的还...

泥沙砖瓦浆木匠
2015/11/12
209
2
Scala之自身类型(Self Type)与蛋糕模式(Cake Pattern)

目录 设计一辆车 第一版的实现基于继承 第二版的实现基于组合 引入自身类型Self Type 引入蛋糕模式Cake Pattern 利弊得失 本文基于Gregor Heine分享的PPT《Scala Self-Types》注解式地介绍自...

bluishglc
2017/03/07
0
0
【OOP】go语言学习笔记(第3章)—面向对象编程

一个典型的类型系统包括: 基础类型: byte, int, bool, float等 复合类型:数组,结构体,指针 可以指向任意对象的类型(Any类型) 值语义和引用语义 面向对象,即所有具备面向对象特征的类型...

mickelfeng
2015/10/27
61
0
java基础(第一篇)继承与组合

前言 本文讲述上篇文章《java基础(第零篇)对象与类》遗留的问题继承与组合的区别,在讲述区别之前。先讲述继承的有关概念,如果你对继承很清楚的可以直接拉到下面阅读继承与组合的区别。 ...

wyn_lin
2018/01/03
0
0
Beego Controller

controller 逻辑 controller就是处理具体的逻辑的,router将请求分发到指定的controlller,controller处理请求,然后返回。 首先我们还是从源码分析入手: 上面的代码显示首先我们声明了一个...

若与
2018/07/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JS基础-该如何理解原型、原型链?

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个...

OBKoro1
今天
6
0
高防CDN的出现是为了解决网站的哪些问题?

高防CDN是为了更好的服务网络而出现的,是通过高防DNS来实现的。高防CDN是通过智能化的系统判断来路,再反馈给用户,可以减轻用户使用过程的复杂程度。通过智能DNS解析,能让网站访问者连接到...

云漫网络Ruan
今天
14
0
OSChina 周一乱弹 —— 熟悉的味道,难道这就是恋爱的感觉

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :好久没分享歌了分享张碧晨的单曲《今后我与自己流浪》 《今后我与自己流浪》- 张碧晨 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
2.7K
24
SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
46
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部