【scala】继承
Scala中的继承与Java有着显著的不同。
抽象类abstract class
abstract class Car{//抽象类
val carBrand:String;//抽象字段,一个没有被初始化的字段
def info();//抽象方法
def greeting(){println("Welcome to my car")}//非抽象方法
}
Scala的抽象类同Java一样不能被实例化,但是可以被继承,可以包含非抽象方法。
定义抽象字段的时候,只要没给出初始化值,就表示为一个抽象字段,但是抽象字段必须要声明类型。
定义抽象方法的时候不需要使用abstract关键字,直接定义,不用写方法体。
class BMWCar extends Car{
override val carBrand: String = "BMW";//重写抽象字段,需使用override关键字
//重写抽象方法,不需要使用override关键字
def info(){println("The car is "+carBrand)}
//重写非抽象方法的时候,需要使用override
override def greeting(): Unit = {println("Welcome to my BMWCar")}
}
我们在继承抽象类的时候使用extends来继承
重写抽象字段和非抽象方法的时候需要使用override关键字来声明。
重写抽象方法的时候不需要使用override关键字,但是写上编译器有也不会报错。
特质trait
Scala同Java相同并不支持多重继承,Java通过接口来达到多重继承效果,Scala则通过特质来实现。
Scala中的特质类似于Java中的接口,但是又不同于接口。
特质可以实现多继承机制,类似于接口。
但是特质又可以包含非抽象方法,相当于抽象类,接口则不能。
特质相当于实现了多继承机制的抽象类。
trait Car{//特质
val carBrand:String;//抽象字段,一个没有被初始化的字段
def info();//抽象方法,不使用abstract
def greeting(){println("Welcome to my car")}//非抽象方法
}
我们注意到,我们使用特质的时候用关键字trait。
特质中可以包含非抽象方法。
trait CarId{//我们再次定义一个特质
var id : Int;
def currentId();
}
class BMWCar extends Car with CarId {
//重写特质Car中的抽象字段
override val carBrand: String = "BMW";
//重写特质CarId中的抽象字段
override var id: Int = 10000;
//重写特质Car中抽象方法
def info(){println("The car is "+carBrand)}
//重写特质Car中非抽象方法的时候
override def greeting(): Unit = {println("Welcome to my BMWCar")}
//重写特质CarId中的抽象方法
override def currentId() = println("My BWMCar id is "+id);
}
在继承多个特质的时候我们使用extends来继承第一个特质,以后每多加一个特质都要使用with来添加。
特质的其他用法同抽象类相同。
【scala】继承的更多相关文章
- Scala 继承
1. 继承 Scala 通过 extends 关键字来继承类. 那么继承一个类有什么好处呢? 子类拥有继承自超类的方法和字段(即为val(常量), var(变量)所定义的) 可以添加自己需要的新方法和 ...
- Scala学习(八)---Scala继承
Scala继承 摘要: 在本篇中,你将了解到Scala的继承与Java和C++最显著的不同.要点包括: 1. extends.final关键字和Java中相同 2. 重写方法时必须用override ...
- 7.scala:继承
版权申明:转载请注明出处. 文章来源:http://bigdataer.net/?p=315 排版乱?请移步原文获得更好的阅读体验 类似于java中的继承,在scala中同样有继承一说,而且在很多方面 ...
- Scala继承
override重写 为什么要用override关键字?因为这样更清楚,不容易出错,比如打错字了,就没覆盖成功,但是不会报错 override可以覆盖feild和method class Person ...
- Scala实战高手****第10课:Scala继承彻底实战和Spark源码鉴赏
isInstanceOf 和 asInstanceOf is用于判断 as用于转换,把父类类型转换成子类类型 getClass 具体找出类型
- 快学Scala之继承
## 1. 继承 Scala语言通过 extends 关键字来继承类. 那么继承一个类有什么好处呢? 子类除了拥有继承自超类的方法和字段(即为val(常量), var(变量)所定义的), 还可 ...
- Scala学习八——继承
一.本章要点 extends,final关键字和Java一样 重写方法时必须使用override 只有主构造器可以调用超类的构造器 可以重写字段 二.扩展类 Scala扩展类和Java一样(使用ext ...
- Scala 面向对象(六):面向对象的特征二:继承 (一)
1 Scala继承的基本语法 class 子类名 extends 父类名 { 类体 } class Person { var name : String = _ var age : Int = _ d ...
- [Scala] 快学Scala A1L1
基础 1.1 声明值和变量 在Scala中,鼓励使用val; 不需要给出值或变量的类型,这个信息可以从初始化表达式推断出来.在必要的时候,可以指定类型. 在Scala中,仅当同一行代码中存在多条语句时 ...
- 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习
下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...
随机推荐
- JPA 对象关系映射之关联关系映射策略
关联关系映射 关联关系映射,是映射关系中比较复杂的一种映射关系,总的说来有一对一.一对多和多对多几种关系.细分起来他们又有单向和双向之分.下面我们逐一介绍一下. 回页首 单向 OneToOne 单向一 ...
- DL for objection detection
在计算机视觉领域,"目标检测"主要解决两个问题:图像上多个目标物在哪里(位置),是什么(类别).围绕这个问题,人们一般把其发展历程分为3个阶段:1. 传统的目标检测方法2. 以R- ...
- 连接postgresql
# psycopg2 engine=create_engine('postgresql+psycopg2://scott:tiger@localhost/mydatabase')# python 连 ...
- 第六课 GDB调试 (上)
1序言: 1.初学者经过学习前面的Makefile知识,信心满满,内心觉得应该要好好学习不单掌握语言的编写,也要学会相对应的工具调高开发效率.有时我们写出来的代码经过执行结果却跟我们预期不一样那怎么办 ...
- Spark --idea无法new scala class
问题: 无法新建Scala class 解决: 1.下载插件 setting-->Plugins-->安装scala插件-->提示重启idea-->自动提示你安装scala s ...
- 再来一道测半平面交模板题 Poj1279 Art Gallery
地址:http://poj.org/problem?id=1279 题目: Art Gallery Time Limit: 1000MS Memory Limit: 10000K Total Su ...
- 移动端1px的border
移动端浏览器解决1px的底部border问题 1.使用border:1px solid #e0e0e0. 在不同设备下由于devicePixelRatio不同导致1px实际显示的长度不同.所以在移动端 ...
- SQL SERVER 索引中聚集索引分析和Transact-SQL语句优化
一. 聚集索引B树分析1.聚集索引按B树结构进行组织的,索引B树种的每一页称为一个索引节点.B树的顶端节点称为根节点. 索引中的低层节点称为叶节点.根节点与叶节点之间的任何索引级别统称为中间级.在聚 ...
- shell脚本多进程
shell脚本再执行过程中就一个进程,从头到尾 下面配置shell脚本执行过程中启动多个进程同时执行 #!/bin/bash for ((i=1;i<=10;i++)) do ( echo &q ...
- 让Tomcat供外网访问
使用Tomcat+花生壳部署一个Javaweb网站,步骤分为三步. 第一,花生壳配置. 下载花生壳,并默认安装.申请动态域名,激活护照,登录.(都是常规操作,不必多说) 第二,Tomcat设置. 找到 ...