构造方法
scala构造方法分为两类,主构造方法和辅助构造方法
scala构建对象可以通过辅助构造方法创建,但必须调用主构造方法
scala是完全面向函数得语言,所以类也是函数
类是函数,可以添加小括号,添加参数列表
类所代表得函数其实就是这个类得构造方法
默认情况下,scala也是给类提供无参构造方法,所以()可以省略
类后面声明得构造方法就是主构造方法,主构造方法中声明得构造方法就是辅助构造方法
package chapter02 //scala构造方法分为两类,主构造方法和辅助构造方法 //scala构建对象可以通过辅助构造方法创建,但必须调用主构造方法 //scala是完全面向函数得语言,所以类也是函数 //类是函数,可以添加小括号,添加参数列表 //类所代表得函数其实就是这个类得构造方法 //默认情况下,scala也是给类提供无参构造方法,所以()可以省略 //类后面声明得构造方法就是主构造方法,主构造方法中声明得构造方法就是辅助构造方法 // object test08 { def main(args:Array[String]):Unit={ var user=new User09() println(user) } } class User09(s:String){ println("主构造方法") println(s) //声明辅助构造方法时用this def this(s:String,s2:String){ this(s) println("主构造方法2") } //TODO 构造方法调用其他构造方法时,被调用的构造方法已经申明 def this(){ this("主构造方法1","xxxxxx") } }
package chapter02 /* class A{ //父类构造方法无参 public A(){} } class B extends A{ public B{ super()调用父类的构造方法 } } */ object test08 { def main(args:Array[String]):Unit={ val user=new User08("zhangshan") } } class Person08(){ println("Person08 主构造方法") } //父类主构造方法没有参数 class User08() extends Person08 { println("User08 主构造方法") def this(s:String){ this() println("User08 辅助构造方法") } }
package chapter02 /* class A{ //父类构造方法有参 public A(String s){} } class B1 extends A{ public B1{ super("xxxx")显示调用父类的构造方法 } } class B2 extends A{ public B2(String:s){ super(s)显示调用父类的构造方法 } } */ object test10 { def main(args:Array[String]):Unit={ val user=new User10("user li") val user2=new User11() } } class Person10(s:String){ println("Person10 主构造方法 = "+s) } //父类主构造方法有参数,必须显示的传递参数 //可以在继承的父类传递参数 class User10() extends Person10("person zhang") { println("User10 主构造方法") def this(s:String){ this() println("User10 辅助构造方法 = "+s) } } /* Person10 主构造方法 = person zhang User10 主构造方法 User10 辅助构造方法 = user li */ class User11(s:String) extends Person10(s) { println("User11 主构造方法 = "+s) def this(){ this("user zhao") println("User11 辅助构造方法") } } /* Person10 主构造方法 = user zhao User11 主构造方法 = user zhao User11 辅助构造方法 */
package chapter02 //构造方法参数 object test11 { def main(args:Array[String]):Unit={ var user=new User2("zhang") println(user.name) } } //类构造方法的参数作用域默认为整个类的主体,但是想要参数作为属性来使用,需要采用特殊方式 var class User2(var name:String){ }
posted on 2020-08-05 17:19 happygril3 阅读(145) 评论(0) 收藏 举报
浙公网安备 33010602011771号