การประกาศ class ใน Scala ทำได้ดังนี้
class Point {
var x; //public
var y; ///public
}
ในกรณีนึ้เราประกาศ class Point ที่มี x และ y เป็นสมาชิกอยู่ (instance member) x และ y เป็น public โดยอัตโนมัติ ดังนั้นเราสร้างเข้าไปเปลี่ยนแปลงค่า x และ y ได้ เช่น
def main(args: Array[String]) {
    val p = new Point()  //สร้าง instance ของ Point
    p.x = 10
    p.y = 20
  }
เราสามารถประกาศ constructor ให้กับ class ได้โดยต่อไปนี้
จากในรูปจะเห็นว่าเราสร้าง instance ของ Point มาสองตัวคือ p และ p1  โดยที่เรา กำหนดค่า x กับ y ของ p หลังจากสร้าง instance
val p = new Point() //สร้าง instance
p.x = 10 //set x เป็น 10
p.y = 20 //set y เป็น 20
สำหรับ p1 เราหนดค่าเริ่มต้นให้กับ x และ y ตอนสร้าง instance เลย
    
ทีนี้มาดูวิธีประกาศ constructor กัน
   
เราไม่จำเป็นต้องประกาศ default constructor เพราะ Scala จะทำให้เราโดยอัตโนมัติ
สำหรับตัวอย่างต่อไปนี้ เราประกาศ contructor ที่รับแค่ x:Int เราไม่ได้เรียก default constructor แต่เรายังจำเป็นที่จะต้อง เรียก constructor ตัวใดตัวนึงอยู่ดี
def this(x:Int) {
val p = new Point() //สร้าง instance
p.x = 10 //set x เป็น 10
p.y = 20 //set y เป็น 20
สำหรับ p1 เราหนดค่าเริ่มต้นให้กับ x และ y ตอนสร้าง instance เลย
val p1 =new Point(1,2)
class Point {
   var x : Int = _
   var y : Int = _
   def this(x:Int, y:Int) {
     this()  //จำเป็นต้องเรียก default constructor ในบรรทัดแรก
     this.x = x
     this.y = y
   }
}
เราประกาศ constructor เหมือนกันกับ เมทธอด แต่ใช้ชื่อว่า this  รวมถึง x:Int และ y:Int เป็น parameter  
สังเกตุว่าเราต้องเรียก default constructor --> this() ในบรรทัดแรก ไม่เช่นนั้นจะ compile error เราไม่จำเป็นต้องประกาศ default constructor เพราะ Scala จะทำให้เราโดยอัตโนมัติ
สำหรับตัวอย่างต่อไปนี้ เราประกาศ contructor ที่รับแค่ x:Int เราไม่ได้เรียก default constructor แต่เรายังจำเป็นที่จะต้อง เรียก constructor ตัวใดตัวนึงอยู่ดี
class Point {
   var x : Int = _  //set ค่าเริ่มต้นของ Int (0)  ให้ x
   var y : Int = _def this(x:Int) {
     this(x, 1) //เรียก constructor อีกตัวหนึ่ง
   }
ในเมทธอด main เราพิมพ์ค่าของ x และ y จาก ออกมาหลังจากรันโปรแกรม
สำหรับการประกาศ x และ y ใน class Point จะสังเกตุได้ว่าเราใช้
var x : Int = _
โดยที่ _ เป็นค่าเริ่มต้นของ Int สมมิตว่าเราประกาศค่า boolean ดังนี้
var a : Boolean = _
a จะเก็บค่าเริ่มต้น (default value) ของ Boolean นั่นก้อคือ false นั่นเอง
   def this(x:Int, y:Int) {
     this()  //จำเป็นต้องเรียก default constructor ในบรรทัดแรก
     this.x = x
     this.y = y
   }
}ในเมทธอด main เราพิมพ์ค่าของ x และ y จาก ออกมาหลังจากรันโปรแกรม
x:10, y:20
x:1,  y:2
สังเกตุว่า การใช้ println เราสามารถใช้ variable ใน string ได้โดยการใช้
s"...${x}...."  โดยที่ x เป็นตัวแปร  และเราต้องมี s นำหน้า "" ในตัวอย่างของเราใช้
val p1 =new Point(1,2)
println(s"x:${p1.x}, y:${p1.y}")    
สำหรับการประกาศ x และ y ใน class Point จะสังเกตุได้ว่าเราใช้
var x : Int = _
โดยที่ _ เป็นค่าเริ่มต้นของ Int สมมิตว่าเราประกาศค่า boolean ดังนี้
var a : Boolean = _
a จะเก็บค่าเริ่มต้น (default value) ของ Boolean นั่นก้อคือ false นั่นเอง
สำหรับบทความต่อไปเรายังคงดูเรื่อง class และ instance กันต่อไปครับ




