• scala:主构造方法和辅助构造方法


    @

    构造器(构造方法)

    作用:

    • 构造对象
    • 初始化属性(给对象的属性赋值)

    Java中构造器

    • 方法名和类名保持一致
    • 构造方法没有返回值类型
    • 构造方法可以重载

    Scala中构造器

    主构造方法

    • 在声明类的同时,就定义了主构造方法,换言之,类就是主构造方法
    • 在一个类中,主构造方法只能有一个

    辅助构造方法

    • 方法名必须叫this
    • 在辅助构造方法开始(第一行)必须直接或者间接的调用主构造方法
    • 辅助构造方法可以重载

    scala代码示例

    object Scala08_TestConstructor {
      def main(args: Array[String]): Unit = {
        //val std: Student08 = new Student08()
        //val std: Student08 = new Student08("jingjing")
        val std: Student08 = new Student08("jingjing",18)
      }
    }
    
    class Student08{
    
      println("0----Student08的主构造方法被调用了")
    
    
      var name:String = _
      var age:Int = _
    
      //声明辅助构造方法
      def this(name:String){
        //直接调用主构造方法
        this()
        println("1----Student08的辅助构造方法被调用了")
        this.name = name
      }
    
      def this(name:String,age:Int){
        //间接调用主构造方法
        this(name)
        println("2----Student08的辅助构造方法被调用了")
        this.age = age
      }
    
    
      /*//以下写法不是构造方法
      def Student08()={
        println("Student08的构造方法被调用了")
      }*/
    }
    

    scala有参数的主构造方法

    • 在声明主构造方法参数的时候,如果参数前什么也不加,那么参数就作为当前类的局部变量使用,不能作为类的属性被访问
    • 如果需要将参数作为属性被访问的话,那么在参数声明前加var或者val关键字
    • 主构造方法参数不能和类中定义的属性名相同
    object Scala09_TestConstructor {
      def main(args: Array[String]): Unit = {
        //val stdJ: Student09 = new Student09
        //stdJ.name = "jingjing"
        //stdJ.age = 16
        //println(stdJ.name)
        var std = new Student09("jingjing",17)
        println(std.name)
      }
    }
    
    /*
    //只提供无参的主构造,单独定义
    class Student09{
      var name:String = _
      var age:Int = _
    }
    */
    
    /*
    //在scala语言中,以下写法比较少,如果这样写,那就是受java毒害太深了
    class Student09(namePararm:String,ageParam:Int){
      var name:String = namePararm
      var age:Int = ageParam
    }
    */
    
    //在声明主构造方法参数的时候,如果参数前什么也不加,那么参数就作为当前类的局部变量使用,不能作为类的属性被访问
    //如果需要将参数作为属性被访问的话,那么在参数声明前加var或者val关键字
    class Student09(var name:String, var age:Int){
      def m1(): Unit ={
        println(name)
        println(age)
      }
    }
    /*
    //同时提供主、辅助构造方法
    class Student09{
      var name:String = _
      var age:Int = _
    
      def this(name:String,age:Int){
        this()
        this.name = name
        this.age = age
      }
    }*/
    
    如果真的不知道做什么 那就做好眼前的事情吧 你所希望的事情都会慢慢实现...
  • 相关阅读:
    创建可视化优秀网站的40个精美jquery插件推荐
    究极程序员跨过的艰难六步
    编写可移植的PHP代码
    程序员如何保持优秀
    网站安全检查列表
    PHP之谈(四)——smarty模板的学习
    PHP
    弱校ACM奋斗史
    学习PHP重在坚持
    About Me
  • 原文地址:https://www.cnblogs.com/sunbr/p/14441396.html
Copyright © 2020-2023  润新知