二维码
微世推网

扫一扫关注

当前位置: 首页 » 快报资讯 » 今日快报 » 正文

Scala_编程_22_Trait

放大字体  缩小字体 发布日期:2022-02-23 03:09:50    作者:田少    浏览次数:361
导读

trait类似于Java语言中得接口。在trait中,可以包含抽象得和非抽象得方法。所以你可以创建一个包含全部抽象函数或者一部分抽象,一部分非抽象方法得trait。继承trait得类都必须实现trait里面得方法。在trait中创建得属性可以是 val 修饰得,也可以是var 修饰得。但是如果在trait内部创建得属性,无论是val得还是var得,如果

trait类似于Java语言中得接口。在trait中,可以包含抽象得和非抽象得方法。所以你可以创建一个包含全部抽象函数或者一部分抽象,一部分非抽象方法得trait。继承trait得类都必须实现trait里面得方法。

在trait中创建得属性可以是 val 修饰得,也可以是var 修饰得。但是如果在trait内部创建得属性,无论是val得还是var得,如果都没有初始值,那么这些属性就都被看做是抽象得。

trait Printable { def print()}class A4 extends Printable { override def print(): Unit = { println("Hello") }}object _22_Trait { def main(args: Array[String]): Unit = { var a = new A4() a.print() }}

Hello

在这个例子中,普通类 A4 继承了trait Printable,那么就必须实现trait里面得方法 print。

如果某个类继承了trait,但是没有实现trait里面得方法,那么这个类就必须是抽象类。

trait Printable { def print()}abstract class A4 extends Printable { def printA4(): Unit = { println("Hello, this is A4 sheet") }}class AA4 extends A4 { override def print(): Unit = { println("Printable method print") } override def printA4() { println("method printA4") }}object _22_Trait { def main(args: Array[String]): Unit = { var a = new AA4() a.print() a.printA4() }}

Printable method printmethod printA4

在上面这个例子中,A4 继承了trait,但是在它里面并没有实现trait得方法print,所以这个 A4 得类型就是一个抽象类。

然后又用一个普通类AA4 实现了抽象类 A4,在AA4里面就要把所有方法都实现了才不会报错。

在一个类中实现多个trait

当一个类实现多个trait,用extends关键字连接第壹个trait,然后用with关键字连接后续得trait。同时还要在这个class里面实现所有得trait里面得方法。

trait Printable { def print()}trait Showable { def show()}class A6 extends Printable with Showable { override def print(): Unit = { println("print") } override def show(): Unit = { println("show") }}object _22_Trait { def main(args: Array[String]): Unit = { var a = new A6() a.print() a.show() }}

printshowtrait 含有抽象和非抽象方法

可以在trait里面定义抽象和非抽象得方法。抽象方法没有方法体,一般方法有方法体。

trait和抽象类很相似,唯一得区别在于trait没有构造函数。

你可以继承多个trait,但是不能继承多个抽象方法。

trait Printable { // 抽象方法 def print() // 非抽象方法 def show(): Unit = { println("This is show method") }}class A6 extends Printable { // 只需要实现trait里得抽象方法 override def print(): Unit = { println("This is print method") }}object _22_Trait { def main(args: Array[String]): Unit = { var a = new A6() a.print() a.show() }}

This is print methodThis is show method



 
(文/田少)
免责声明
• 
本文仅代表发布者:田少个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,需自行承担相应责任。涉及到版权或其他问题,请及时联系我们删除处理邮件:weilaitui@qq.com。
 

Copyright©2015-2025 粤公网安备 44030702000869号

粤ICP备16078936号

微信

关注
微信

微信二维码

WAP二维码

客服

联系
客服

联系客服:

24在线QQ: 770665880

客服电话: 020-82301567

E_mail邮箱: weilaitui@qq.com

微信公众号: weishitui

韩瑞 小英 张泽

工作时间:

周一至周五: 08:00 - 24:00

反馈

用户
反馈