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】继承的更多相关文章

  1. Scala 继承

    1. 继承 Scala 通过 extends 关键字来继承类. 那么继承一个类有什么好处呢? 子类拥有继承自超类的方法和字段(即为val(常量), var(变量)所定义的) 可以添加自己需要的新方法和 ...

  2. Scala学习(八)---Scala继承

    Scala继承 摘要: 在本篇中,你将了解到Scala的继承与Java和C++最显著的不同.要点包括: 1. extends.final关键字和Java中相同 2. 重写方法时必须用override ...

  3. 7.scala:继承

    版权申明:转载请注明出处. 文章来源:http://bigdataer.net/?p=315 排版乱?请移步原文获得更好的阅读体验 类似于java中的继承,在scala中同样有继承一说,而且在很多方面 ...

  4. Scala继承

    override重写 为什么要用override关键字?因为这样更清楚,不容易出错,比如打错字了,就没覆盖成功,但是不会报错 override可以覆盖feild和method class Person ...

  5. Scala实战高手****第10课:Scala继承彻底实战和Spark源码鉴赏

    isInstanceOf  和 asInstanceOf is用于判断 as用于转换,把父类类型转换成子类类型   getClass 具体找出类型    

  6. 快学Scala之继承

        ## 1. 继承 Scala语言通过 extends 关键字来继承类. 那么继承一个类有什么好处呢? 子类除了拥有继承自超类的方法和字段(即为val(常量), var(变量)所定义的), 还可 ...

  7. Scala学习八——继承

    一.本章要点 extends,final关键字和Java一样 重写方法时必须使用override 只有主构造器可以调用超类的构造器 可以重写字段 二.扩展类 Scala扩展类和Java一样(使用ext ...

  8. Scala 面向对象(六):面向对象的特征二:继承 (一)

    1 Scala继承的基本语法 class 子类名 extends 父类名 { 类体 } class Person { var name : String = _ var age : Int = _ d ...

  9. [Scala] 快学Scala A1L1

    基础 1.1 声明值和变量 在Scala中,鼓励使用val; 不需要给出值或变量的类型,这个信息可以从初始化表达式推断出来.在必要的时候,可以指定类型. 在Scala中,仅当同一行代码中存在多条语句时 ...

  10. 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习

    下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...

随机推荐

  1. PHP使用Mongodb

    一.安装Mongodb的PHP扩展 wget http://pecl.php.net/get/mongo-1.2.7.tgz //下载扩展包tar zxvf mongo-1.2.7.tgzcd mon ...

  2. unity3d相关资源

    http://pan.baidu.com/s/1kTG9DVD   GUI源码

  3. EXP直接导出压缩问津,IMP直接导入压缩文件的方法

    在10G之前,甚至在10G的Oracle环境中,有很多数据量不大,重要性不太高的系统依然采用EXP/IMP逻辑导出备份方式,或者,作为辅助备份方式. 通常情况下,我们都是这样操作的:1.exp导出2. ...

  4. springcloud 开发时快速剔除无用服务

    注册中心配置: # 关闭保护机制 eureka.server.enable-self-preservation=false #剔除失效服务间隔 eureka.server.eviction-inter ...

  5. MySQL数据库Date型数据插入问题

    MySQL数据库中,Date型数据插入问题,总是提示如下错误: “java.util.Date cannot be cast to java.sql.Date” 解决办法: 1.首先,获取Date型数 ...

  6. 如何根据一些参数,自动生成一个简单的maven工程,然后导入Eclipse直接使用?(maven命令)

    1. 使用mvn archetype:generate命令 2. 选择archetype类型:(默认是org.apache.maven.archetypes:maven-archetype-quick ...

  7. Linux基础以及简单命令

    1. UNIX是什么 UNIX是一个计算机操作系统,一个用来协调.管理和控制计算机硬件和软件资源的控制程序.特点:多用户和多任务 2. GNU项目与自由软件 GPL条款是为保证GNU软件可以自由地使用 ...

  8. js 改变文章字体大小

    //设置页面文字大小 function SetFontSize(areaid, size) { document.getElementById(areaid).style.fontSize = siz ...

  9. 利用TokyoTyrant构建兼容Memcached协议、支持故障转移、高并发的分布式Key-value持久存储系统(转)

    Tokyo Cabinet 是日本人 平林幹雄 开发的一款 DBM 数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是 Berkeley D ...

  10. Spring 配置log4j和简单介绍Log4J的使用

    Log4j 是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务器.NT的事 件记录器.UNIX Syslog守护进程等 ...