特质 trait
scala中没有接口(interface)的概念,有特质(trait)的概念,类似于接口
package chapter02 //特质:接口 //scala中没有接口(interface)的概念,有特质(trait)的概念,类似于接口 object test13 { def main(args:Array[String]):Unit={ var user=new User12() println(user) } } trait test12 {} trait test22{} class Person12{} //特质可以继承的,使用关键字extends //如果类要继承多个特质,可以用with连接 //如果类同时存在父类和特质,依然采用继承方式,extends父类,with特质 class User12 extends Person12 with test12 with test22 {}
package chapter01 object test15 { def main(args:Array[String]):Unit={ //java中的接口无法构建对象,必须使用实现类 //java接口无法写入代码 //java中的接口可以声明方法 //Java中的接口可以声明属性,属性值无法修改 //scala也无法直接构建对象 //scala特质中可以写入有代码 //scala特质中的属性和方法都可以在混入的类中调用 //特质中可以申明抽象方法 //new Test15() var user = new User22() //属性 user.username="lisi" println(user.username) //方法 user.test() //抽象方法 user.test02() } } trait Test22{ println("test22....") var username:String="zhangshan" def test():Unit={ println("test......") } //抽象方法 def test02() } class Person22{} class User22 extends Person22 with Test22{ def test02():Unit={ println("user22.....") } }
package chapter01 object test16 { def main(args:Array[String]):Unit={ var user = new User26() } } trait Test26{ println("trait.....") } class Person26 { println("parent.....") } //特质只与当前类有关 class User26 extends Person26 with Test26{ println("child.....") } //parent..... //trait..... //child.....
package chapter01 object test16 { def main(args:Array[String]):Unit={ var user = new User26() } } trait Test26{ println("trait.....") } class Person26 extends Test26 { println("parent.....") } //特质只与当前类有关,父类先执行,特质再执行 //如果父类中有相同的特质,trait只初始化一次
class User26 extends Person26 with Test26{ println("child.....") } //trait..... //parent..... //child.....
package chapter01 object test16 { def main(args:Array[String]):Unit={ var mysql = new Mysql01() mysql.insert() } } trait Operate01{ println("Operate......") def insert(): Unit ={ println("插入数据") } } //特质可以继承其他特质 trait DB01 extends Operate01 { println("DB......") override def insert(): Unit ={ print("向数据库") super.insert() } } trait File01 extends Operate01 { println("File......") override def insert(): Unit ={ print("向文件") super[Operate01].insert() } } //多特质混入,代码执行顺序为从左到右 //多特质混入,方法执行顺序从右向左 //特质中super不是指代父特质,指代上一级特质,即File01中的super指代DB01 //如果希望super指代父特质,需要增加[] //java中的接口可以当作scala中的特质来使用 class Mysql01 extends DB01 with File01 with Serializable { } //Operate...... //DB...... //File...... //向文件插入数据
package chapter01 object test16 { def main(args:Array[String]):Unit={ //动态混入,扩展性非常强 var mysql = new Mysql01() with Operate01 mysql.insert() } } trait Operate01{ def insert(): Unit ={ println("插入数据") } } class Mysql01 { }
package chapter01 object test16 { def main(args:Array[String]):Unit={ //动态混入,扩展性非常强 var mysql = new Mysql01() mysql.insert() mysql.getMessage } } trait Operate01{ //特质使用范围 this:Exception => def insert(): Unit ={ println("插入数据") this.getMessage } } class Mysql01 extends Exception with Operate01 { }
posted on 2020-08-06 14:47 happygril3 阅读(179) 评论(0) 收藏 举报
浙公网安备 33010602011771号