scala-class

object Scala {

  def main( args : Array[ String ] ) : Unit =
    {
      val p = new Point( 1, 2 );
      println( p );
      p.move( 12, 13 );
      println( p );

      val p2 = new Point
      println( p2 )

      val p3 = new Point( y = 2 )
      println( p3 )

      val point4 = new Point2
      point4.x = 99
      point4.x_=( 98 );
      point4.y = 101 // prints the warning
      println( point4 )

      /**
       *
       * <pre>
       * Primary constructor parameters with val and var are public.
       * However, because vals are immutable,
       * you can’t write the following.
       * class Point(val x: Int, val y: Int)
       *     val point = new Point(1, 2)
       *     point.x = 3  // <-- does not compile
       * </pre>
       * <pre>
       * 首要构造器上参数都是public.如果没有明确写出是var x:Int,默认是val
       * val是不可变的,所以如上代码不能通过编译
       * </pre>
       */
    }
}

class Point( var y : Int = 0, var x : Int = 0 ) {
  def move( dy : Int, dx : Int ) : Unit =
    {
      this.x = x;
      this.y = y;
    }

  override def toString() : String =
    s"($x,$y)"
}

class Point2 {
  private var _x = 0;
  private var _y = 0;
  private var bound = 100;

  //define method x for access _x
  def x = _x;

  /**
   * <pre>
   * def x_= and def y_= are for validating and setting
   * the value of _x and _y.
   * Notice the special syntax for the setters:
   * the method has _= appended to the identifier of the
   * getter and the parameters come after
   * </pre>
   * <pre>
   * def x_=和def y_=为了检验设置的值.注意setters方法上特殊的语法.
   * </pre>
   */
  def x_=( newValue : Int ) : Unit =
    {
      if ( newValue < bound )
        _x = newValue
      else
        printWarning
    }
  //define method y for access _y
  def y = _y;
  def y_=( newValue : Int ) : Unit =
    {
      if ( newValue < bound )
        _x = newValue
      else
        printWarning
    }
  private def printWarning = println( "WARNING: Out of bounds" );

  override def toString() : String =
    s"($x,$y)"
}

下面这份代码更能说明class的setter和getter

object Scala {

  def main( args : Array[ String ] ) : Unit =
    {

      val point4 = new Point
      point4.xx = 99
      point4.y = 101 // prints the warning
      println( point4 )
    }
}

class Point {
  private var _x = 0;
  private var _y = 0;
  private var bound = 100;


  //define method x for access _x
  def xx = _x;

  /**
   * <pre>
   * def x_= and def y_= are for validating and setting
   * the value of _x and _y.
   * Notice the special syntax for the setters:
   * the method has _= appended to the identifier of the
   * getter and the parameters come after
   * </pre>
   * <pre>
   * def x_=和def y_=为了检验设置的值.注意setters方法上特殊的语法.
   * </pre>
   */
  def xx_=( newValue : Int ) : Unit =
    {
      if ( newValue < bound )
        _x = newValue
      else
        printWarning
    }
  //define method y for access _y
  def y = _y;
  def y_=( newValue : Int ) : Unit =
    {
      if ( newValue < bound )
        _x = newValue
      else
        printWarning
    }
  private def printWarning = println( "WARNING: Out of bounds" );

  override def toString() : String =
    s"($xx,$y)"
}

 多个构造函数

object Scala {

  def main( args : Array[ String ] ) : Unit =
    {

      val point4 = new Point
      point4.xx = 99
      point4.y = 101 // prints the warning
      println( point4 )

      val point5 = new Point( 50 )
      point5.y = 101 // prints the warning
      println( point5 )

    }
}

class Point {
  private var _x = 0;
  private var ny = 0;
  private var bound = 100;

  def this( xxx : Int ) {
    this()
    xx = xxx;
    println("here")
  }

  //define method x for access _x
  def xx = _x;

  /**
   * <pre>
   * def x_= and def y_= are for validating and setting
   * the value of _x and _y.
   * Notice the special syntax for the setters:
   * the method has _= appended to the identifier of the
   * getter and the parameters come after
   * </pre>
   * <pre>
   * def x_=和def y_=为了检验设置的值.注意setters方法上特殊的语法.
   * </pre>
   */
  def xx_=( newValue : Int ) : Unit =
    {
      if ( newValue < bound )
        _x = newValue
      else
        printWarning
    }
  //define method y for access _y
  def y = ny;
  def y_=( newValue : Int ) : Unit =
    {
      if ( newValue < bound )
        _x = newValue
      else
        printWarning
    }
  private def printWarning = println( "WARNING: Out of bounds" );

  override def toString() : String =
    s"($xx,$y)"
}
原文地址:https://www.cnblogs.com/shuiyonglewodezzzzz/p/9352108.html