scala中的接口与java中的接口抽象类的区别

 我们知道java中我们经常看到同时提供接口和抽象基类的做法,那么scala中是否也有这些类和操作呢?

scala提供trait特质而非接口,特质可以同时拥有抽象方法和具体方法,以及状态,而类可以实现多个特质。其实在scala中也有抽象类和接口的说法,按照java的做法也是可行,那么我们现在举例说明一下scala中针对拥有抽象类和接口的共合体是怎么做的。

如下,定义了一个特质:

/**

  • 定义一个特质
    */
    trait Logger {

def log(msg: String)

}

子类的实现或继承
class ConsoleLogger extends Logger {

/**
* 实现抽象类的方法
*/
// def log(msg: String): Unit = {
// println(msg)
// }

/**
* 实现接口的方法
* @param msg
*/
override def log(msg: String): Unit = {
println(msg)
}
}

如下我们可以看到,我们无须将方法声明为abstract,特质中未被实现的方法,默认就是抽象的。
由此,我们可以得出在scala中编写程序的时候,可以吧抽象方法和具体方法,状态都写在trait中。

你可能感兴趣的:(scala中的接口与java中的接口抽象类的区别)