【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 ...
随机推荐
- window下安装mysql详细步骤
1.下载安装包 打开mysql官网下载页面:http://dev.mysql.com/downloads/mysql/ 1.选择相应的版本和平台 2.mysql配置 打开刚刚解压的文件夹F:\mysq ...
- 怎样将Excel包含某字符的单元格填充颜色
在处理数据的时候,xmyanke想将Excel中包含某字符的单元格填充蓝色,比较容易看清,弄了好一阵子都没完成,最后试用条件格式处理了一下,终于实现了. 比如要将A1到A12区间包含数字1的单元格填充 ...
- 【Sql Server】—sql Servler登录失败
登录失败报错信息如下: 标题: 连接到服务器 ------------------------------ 无法连接到 localhost. ----------------------------- ...
- 通信—HTTP 协议入门(转载)
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等). HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于199 ...
- Python基础-面向对象1
class Bar: def fansik(self, name, age): print(name, age) obj = Bar() print(obj.fansik('fanjinbao', 1 ...
- R 基本函数总结
基本一.数据管理 vector:向量 numeric:数值型向量 logical:逻辑型向量 character:字符型向量 list:列表 data.frame:数据框 c:连接为向量或列表 len ...
- django【自定义分页】
1. views.py def app(request): page_info = PageInfo(request.GET.get('p'), 6, 100, request.path_info, ...
- numpy.linspace介绍
numpy.linspace:在指定范围内返回均匀间隔的数组 In [12]: import numpy as np In [13]: result = np.linspace(1,10) #默认生成 ...
- cdoj1334郭大侠与Rabi-Ribi
地址:http://acm.uestc.edu.cn/#/problem/show/1334 题目: 郭大侠与Rabi-Ribi Time Limit: 3000/1000MS (Java/Other ...
- Hive2.2.1概述(待重写)
概述 hive 是一个包裹着 hdfs 的壳子,hive 通过 hql,将 sql 翻译成 MR ,进行数据查询. Hive是⼀个构建在Hadoop之上的数据仓库 hive的数据存在hdfs上,元信息 ...