package com.spark.scala.basics
/**
* 1.
*/
trait Logger {
def log(message: String): Unit = {
println("Logger: " + message)
}
}
trait RichLogger extends Logger{
override def log(message: String): Unit = {
println("RichLogger: " + message)
}
}
class Loggin(val name : String) extends Logger {
def loggin: Unit = {
println("Hi, " + name )
}
log(name)
}
trait Information {
def getInformation: String
def chechIn: Boolean = {
getInformation.equals("Scala")
}
}
class Passenger(val name: String) extends Information {
override def getInformation = name
}
object HelloTrait {
def main(args:Array[String]): Unit ={
val person = new Loggin("World") with RichLogger //接口的第三方实现
person.loggin
}
}
package com.expgiga.ScalaTest
/**
* Scala Trait相当于Java的接口,实际上它比接口功能还要强大
* 与接口不同的是,它还可以定义属性和方法的实现
* 一般情况下Scala的类只能够继承单一父类,但是如果是Trait的话就可以继承多个,从结果来看就是实现了多重继承
* Trait定义的方式与类类似,但它使用的关键字是trait
*/
object TraitTest {
def main(args:Array[String]): Unit = {
val p1 = new Point(2, 3)
val p2 = new Point(2, 4)
val p3 = new Point(3, 3)
println(p1.isNotEuqal(p2))
println(p1.isNotEuqal(p3))
println(p1.isNotEuqal(2))
}
}
trait Equal {
def isEuqal(x: Any): Boolean
def isNotEuqal(x: Any): Boolean = !isEuqal(x)
}
class Point(xc: Int, yc: Int) extends Equal {
var x: Int = xc
var y: Int = yc
def isEuqal(obj: Any) =
obj.isInstanceOf[Point] &&
obj.asInstanceOf[Point].x == x
}