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特质使用

     

  • 相关阅读:
    java.util中的Stack,Queue,Iterable;泛型
    java.util中的Collection,Map;
    java.lang中的异常类2020.12.18
    java.util包,Date,Calender,Random,Collection.202012.19/20号补写
    vue框架搭建流程
    Django model中的class Meta详解
    Python重要配置大全
    Python进程与线程
    Pandas模块
    程序语言官方网址大全
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/13262742.html
Copyright © 2011-2022 走看看