zoukankan      html  css  js  c++  java
  • 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
      }
    }*/
    
    如果真的不知道做什么 那就做好眼前的事情吧 你所希望的事情都会慢慢实现...
  • 相关阅读:
    定位服务器的性能
    关于tcp的keepalive
    写给future的话
    声音评测专用术语
    高效能人士必知铁律--note
    《如何高效学习》读书笔记
    如何快速接手一个系统?
    几个基础函数及特性
    最大的矩形(测试全对,为什么只有20分??)
    输入字符串(由0,1组成),编程计算其中连续0,1出现的最大次数
  • 原文地址:https://www.cnblogs.com/sunbr/p/14441396.html
Copyright © 2011-2022 走看看