【scala】继承
2024-09-30 19:55:52
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来添加。
特质的其他用法同抽象类相同。
最新文章
- 关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询
- Jmeter之Web端HTTP性能测试(九)
- xhtml文档
- Objective-C基础数据类型-NSSet[转]
- MYSQL 基于GTID的复制
- MySQL去除外键关联关系
- 再说Play!framework http://hsfgo.iteye.com/blog/806974
- c# 工具
- MONGODB 查询
- my Style
- cocos2d-x实战 C++卷 学习笔记--第4章 win32平台下中文乱码问题
- JavaScript的变量提升
- 《Two Days DIV + CSS》读书笔记——CSS控制页面方式
- CentOS7上安装Snipe-IT4.6.3详细过程及注意事项
- hibernate框架学习之持久化对象OID
- 用sqoop将mysql的数据导入到hive表
- JAVA 第一周学习总结
- Oracle列自增实现(3)-DEFAULT Values Using Sequences
- 退出shell 脚本
- ps和fireworks切图网页优化,jpg为80时