zoukankan      html  css  js  c++  java
  • Scala 面向对象(八):特质(接口) 一

    1 Scala接口的介绍

    从面向对象来看,接口并不属于面向对象的范畴,Scala是纯面向对象的语言,在Scala中,没有接口。

    Scala语言中,采用特质trait(特征)来代替接口的概念,也就是说,多个类具有相同的特征(特征)时,就可以将这个特质(特征)独立出来,采用关键字trait声明。 理解trait 等价于(interface + abstract class)

     2  特质(trait)

    trait 的声明

    trait 特质名 {

    trait体

    }

    trait 命名 一般首字母大写.

    Cloneable , Serializable

    object T1 extends Serializable {

    }

    Serializable: 就是scala的一个特质。

    在scala中,java中的接口可以当做特质使用

    3 Scala中trait 的使用

    一个类具有某种特质(特征),就意味着这个类满足了这个特质(特征)的所有要素,所以在使用时,也采用了extends关键字,如果有多个特质或存在父类,那么需要采用with关键字连接

    没有父类

    class 类名 extends 特质1 with 特质2 with 特质3 ..

    有父类

    class 类名 extends 父类 with 特质1 with 特质2 with 特质3

    4  特质的快速入门案例

    可以把特质可以看作是对继承的一种补充

    Scala的继承是单继承,也就是一个类最多只能有一个父类,这种单继承的机制可保证类 的纯洁性,比c++中的多继承机制简洁。

    但对子类功能的扩展有一定影响.所以 我们认为: Scala引入trait特征 第一可以替代Java的接口, 第二个也是对单继承机制 的一种补充

    复制代码; "复制代码")

    trait trait1 { //声明方法,抽象的.
    def getConnect(user: String, pwd: String): Unit //def test(n1:Int)
    } class A {} class B extends A {} class C extends A with trait1 {
    override def getConnect(user: String, pwd: String): Unit = {

    println("c连接mysql")

    }} class D {} class E extends D with trait1 {
    def getConnect(user: String, pwd: String): Unit = {

    println("e连接oracle")

    }} class F extends D {}

    复制代码; "复制代码")

    5 特质trait 的再说明

    1)Scala提供了特质(trait),特质可以同时拥有抽象方法和具体方法,一个类可以实现/继承多个特质。

     2)特质中没有实现的方法就是抽象方法。类通过extends继承特质,通过with可以继承多个特质

    3)所有的java接口都可以当做Scala特质使用

     

  • 相关阅读:
    linux下mysql安装
    出现GC overhead limit exceeded 的解决方案
    什么是OOM?如何解决OOM问题!
    老司机告诉你:别再被忽悠,汽车节气门这样洗最养车
    HDU 4352 XHXJ's LIS(数位dp&状态压缩)
    Linux bash: scp: command not found的问题记录
    Codeforces Round #315 (Div. 2)
    【营销】非常重要
    firebug的应用
    powerdesigner中实现PDM到MYSQl数据库的转换
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309055.html
Copyright © 2011-2022 走看看