为什么80%的码农都做不了架构师?>>>   

接上篇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 = 0def f = 1    //不能编译通过,因为字段和方法重名
}

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

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

  • 类型(类和特质名)

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

转载于:https://my.oschina.net/fhd/blog/493849

组合与继承之重写方法和字段相关推荐

  1. 为什么不通过修改接口或者选择书写继承接口重写方法的新子类,偏偏选择添加上一个装饰器 (装饰类的作用)【java基础-----装饰器】

    1.盆友们,其实这个问题挺简单的,还记得单纯我们为啥选择定义接口呀抽象类呀(这些框架.模板的)吗? 大白话--"方便批量生产"+ "不破坏原有类结构". (最后 ...

  2. python 类的封装、继承、重写方法

    class Person(object):def __init__(self, name, age):self.name = nameself.age = agedef info(self):prin ...

  3. JAVA 基础 / 第二十九课:接口与继承 / JAVA 重写方法和多态

    2018-03-19 子类可以继承父类的对象方法.在继承后,重复提供该方法,就叫做方法的重写:又叫覆盖 override 1.父类Item 父类Item有一个方法,叫做effect package p ...

  4. java 继承 实现 会重写 方法吗_java 中继承,组合,重载,重写的实现原理 (转)...

    我们知道,继承,组合,重载,重写是java语言的面向对象实现的基本特征. 那么在java内部,究竟是如何实现这些面对对象的基本特征的呢? 继承和组合是面向对象中代码复用的主要实现方式,他们可以达到类似 ...

  5. Django admin 继承user表后密码为明文,继承UserAdmin,重写其方法

    Django用户继承AbstractUser后密码为明文 其实本不应该有这个问题,却花了我很久的时间,因为还是初学阶段. 造成这个原因是因为在admin注册的生活没有指定Admin 在app的admi ...

  6. Python零基础速成班-第9讲-Python面向对象编程(上),对象和类、初始化、继承、重写、多态、类方法、组合

    Python零基础速成班-第9讲-Python面向对象编程(上),对象和类.初始化.继承.重写.多态.类方法.组合 学习目标 修饰器 面向对象编程:对象和类.初始化.继承.重写.多态.类方法.组合 课 ...

  7. java 接口重写_接口与继承系列教材 (三)- Java 重写方法

    8 个答案 valecalida 答案时间:2021-01-12 package LOL.property; public class property { } class Item{ String ...

  8. # 封装,抽象类,继承,重写java编程题 问题描述 ``` 某公司的雇员分为以下若干类: Employee:这是所有员工总的父类,属性:员工的姓名,员工的生日月份。 方法:getSalary(int

    封装,抽象类,继承,重写java编程题 问题描述 某公司的雇员分为以下若干类: Employee:这是所有员工总的父类,属性:员工的姓名,员工的生日月份. 方法:getSalary(int month ...

  9. php继承 重写方法吗,php中如何重写一个方法呢?

    摘要: 下文讲述php类中"重写方法"的方法简介,如下所示: 在php类中,有时候父级中原有的方法无法满足系统的要求时, 此时我们可以通过继承父类,在子类中重写父类的方法, 使其功 ...

最新文章

  1. Java IDEA import sun.reflect.ConstructorAccessor报错
  2. 从零搭建React全家桶框架教程
  3. java websocket 库_Java 项目中的 WebSocket 实现
  4. 10年前腾讯微信后台第一天提交的代码曝光!
  5. Python 与 SQLServer数据库连接
  6. oracle record is locked by another user
  7. 文件操作工具类FileUtil
  8. windows环境下Oracle数据库冷备份和恢复
  9. iOS开发的学习笔记
  10. SQL 查询横表变竖表
  11. 数据分析工具选型3大秘诀,Excel竟未上榜
  12. mysql-多表查询-内联查询左查询
  13. 图形推理1000题及答案解析_判断推理图形推理——区分旋转翻转
  14. java空白页,[求教]JSP页面显示为空白页,请高手赐教!
  15. html登录选项卡实例,html+JQuery登录实例
  16. 批量txt数据转换为excel
  17. 记一次根据url下载金庸有声小说
  18. 【EXCEL批量查询手机号归属地小技巧】很多网友想看excel怎么批量查询手机号归属地,今天它来了
  19. 双光耦开关电源电路图_简单的开关电源电路图大全(六款简单的开关电源电路设计原理图详解)...
  20. phpWord设置页码奇偶页不同Footer::EVEN

热门文章

  1. Java的List和Json转换以及StringRedisTemplate往redis存泛型对象
  2. 开启一个新的终端并执行特定的命令
  3. base64开源库介绍及使用
  4. C++11中std::initializer_list的使用
  5. Caffe源码中layer文件分析
  6. 设计模式之代理模式(Proxy)摘录
  7. m1芯片支持php,M1芯片兼容性怎么样 M1芯片软件兼容好吗
  8. vb6调用python识别训练例子_在vb6中创建的“标准”dll在python中调用时会出现访问冲突...
  9. java抛出自定义异常_10 个深恶痛绝的 Java 异常。。
  10. python tkinter选择路径控件_Python3 Tkinter选择路径功能的实现方法