zoukankan      html  css  js  c++  java
  • Scala编程入门---面向对象编程之Trait

    Scala中Trait是一种特殊概念

    首先我们可以将Triat做为接口来使用,此时的Triat就与java中的接口非常相似

    在Triat中可以定义抽象方法,就与抽象类中的抽象方法一样,只要不给出具体的实现即可

    类可以使用extend是关键字来继承Triat,注意这里不是Implement,而是extends,在Scala中没有Implement的概念,无论是继承还是Triat都是extends

    类继承Triat后,必须实现其中的抽象方法,实现是不需要override关键字

    Scala不支持对类进行多继承,但是支持多重继承triat,使用with关键字即可

    triat sayHello{
        def sayHello(name:String)
    }
    
    triat makeFriends{
        def makeFriends(p:Person)
    }
    
    class Person(val name:String) extends sayHello with makeFriends{
        def sayHello(otherName:String)= println("hello,"+otherName+",i'm"+name)
        def makeFriends(p:Person) = println("Hello"+p.name+",I'm"+name+"i want to make friend with you ")
    }

    val p = new Person("leo")
    val p2 = new Person("jack")

    p.sayHello("jack")
    p.makeFriends(p2

    在Triat中定义具体方法

    Scala中的Triat可以不是只定义抽象方法,还可以定义具体方法,此时的Triat更像是包含了通用工具方法的东西

    有一个专有名词来形容这种情况,就是说Triat的功能混入了类

    举例来说,triat中可以包含一些很多类都通用的功能方法,比如打印日志,sprak中就使用了triat来定义了通用日志打印法

    triat Logger{
        def log(message:String) = prinl("msg:"message)
    }
    
    class Person(val name:String) extends Logger{
        def makeFrinds(p:Person){
            println("Hi,i'm"+name+",i'm glad to make friends with you ,"+p.name)
            log("make friends method is invoked with parameter Person[name="+p.name+"]")
        }
    }

    在Triat中定义具体字段

    Scala中Triat可以定义具体field,此时继承triat就自动获取了triat中定义的field

    但这种获取field的方式与继承扯拉学说是不同的:如果是继承class获取的field,实际是定义在父类中的。而继承triat获取的field,就直接被添加到类中

    triat Person{
        val eyeNum =2
    }
    
    class student(name:String) extends Person{
    
        def  sayHello =println("Hi ,i'm "+name+",I have "+eyeNum+"eyes")
    }

    在triat中定义抽象字段

    Scala中Triat可以定义抽象filed,triad中的具体方法可以依据抽象filed来编写

    但是继承triat类,侧必须覆盖抽象filed,提供具体值

    triat SayHello{
        val mes:String
        def sayHello(name:String) = println(mes+","+name)
    }
    
    class Person(name:String) extends SayHello{
        val msg:Stirng = "hello"
        def makeFriends(p:Person){
            sayHello()
            println("I'm"+name+", I want to make friends with you !")
        }
    }
  • 相关阅读:
    数据中心基础设施自动化运维之puppet专项
    centos git版本服务器配置
    安装PHP出现make: *** [sapi/cli/php] Error 1 解决办法
    php5.5 yum源
    CentOS下源码安装Apache2.4+PHP5.4+MySQL5.5
    php升级到5.4
    puppet重申证书
    passwnger
    Http状态消息
    UVA 10168 Summation of Four Primes(数论)
  • 原文地址:https://www.cnblogs.com/yeszero/p/6955845.html
Copyright © 2011-2022 走看看