scala抽象类
抽象类
trait
可以理解为可以带有具体方法实现的接口类
trait Logger{ //trait相当于接口def log(msg:String){prinln("log " + msg)}}class Test extends Logger{def test{log("xxx")}}//使用object Basic3 extends App{val t = new Test //产生一个对象t.test //调用对象的方法}
含有抽象方法的trait
trait Logger{def log(msf : String) //抽象方法}trait ConsoleLogger extends Logger{def log(msg : String){println(msg)}}class Test extends ConsoleLogger{def test{log("PPP")}}
//使用object Basic3 extends App{val t = new Testt.test}
抽象类和trait类(接口类)
trait ConsoleLogger{def log(msg: String){println("save money : "+ msg)}}- trait MessageLogger extends ConsoleLogger{
- override def log(msg:String){
- println("save money to bank:" + msg)
- }
- }
abstract class Account{def save}class MyAccount extends Account with ConsoleLogger{def save{log("100")}}//使用object Basic3 extends App{valacc = new MyAccount with MessageLogger //定义一个带有特质的对象,trait为特质的意思,用with表示带有什么特质- acc.save
}
在object中使用apply方法
class ApplyTest{def test{println("test")}}object ApplyTest{ //在object中定义的方法相当一静态方法def apply() = new ApplyTestdef fun1{println("this is a static method")}}//类的框架class Basic4{}object Basic4 extends App{val a = ApplyTest() //注意,等号右边没有new关键字,调用ApplyTest对象时实际调用的是ApplyTest对象中的apply方法,然后把apply的返回值给aa.test}//结果输出为test
在class中使用apply方法
class ApplyTest{def apply() = "APPLY"def test{println("test")}}object ApplyTest{def apply() = new ApplyTestdef fun1{println("this is a static function")}}class Basic4{}object Basic4 extends App{val t = new ApplyTestprintln(t()) //t()表示调用t对象中的apply方法}
总结:
类名加括号调用的是object中的apply方法 ,如 val a = ApplyTest()
对象名加括号调用的是类中的apply方法, 如 t()
在一个代码块中导入包,出了这个快,就不起作用了
{import xx.xxx.xyz}
重命名引入成员
//例如,将util包中的hashMap类重命名为JavaHashMapimport java.util.(HashMap => JavaHashMap)
隐藏
//例如隐藏HashMapHashMap => _
自动引入
//例如,引入java.lang中的所有类java.lang._

浙公网安备 33010602011771号