Lập trình Kotlin - Constructor

Constructor

Trong Kotlin, Constructor một khối mã tương tự như phương thức. Constructor được khai báo cùng tên với lớp theo sau bởi dấu ngoặc đơn '()'. Constructor được sử dụng để khởi tạo các biến tại thời điểm tạo đối tượng.

Các loại constructor

Kotlin hỗ trợ 2 loại Constructors (những hàm đặc biệt, mặc định để khởi tạo các giá trị ban đầu cho các đối tượng khi cấp phát bộ nhớ) đó là

  1. primary constructor  
  2. secondary constructors

1. Khai báo primary constructor trong Kotlin:

class SinhVien constructor(ma:Int,ten:String){
}

Ở trên constructor là từ khóa, bên trong nó có 2 đối số, có nghĩa là Lớp SinhVien này có 1 Primary construtor có 2 đối số.

Nếu như primary construtor không có chứa các chú thích (annotations) và các modifiers(private, protected,public) thì có thể loại bỏ từ khóa constructor khỏi khai báo, tức là ta có thể Khai báo ngắn gọi như sau:

class SinhVien (ma:Int,ten:String){
}

Một lưu ý quan trọng là primary constructor không thể chứa bất kỳ đoạn mã nào, nếu muốn khởi tạo các giá trị mặc định cho các biến khi dùng primary constructor thì ta phải dùng khối lệnh init{} , ví dụ:

class SinhVien (ma:Int,ten:String){
init {
  println("Đây là primary constructor")
  println("Mã=$ma ; Tên =$ten")
  }
}

Khi khai báo biến để sử dụng lớp SinhVien ở trên ta sẽ làm như sau:

fun main(args: Array) {
 var lanh=SinhVien(113,"Trần Thị Long Lanh")
}

Chạy chương trình, ta được kết quả như sau:

Đây là primary constructor
Mã=113 ; Tên =Trần Thị Long Lanh

Khi khai báo var lanh=SinhVien(113,”Trần Thị Long Lanh”) nó sẽ tự động tìm tới primary constructor và tự nhảy vào init block để thực hiện.

Và chú ý là không cần dùng từ khóa new để xin cấp phát bộ nhớ như C# hay java…

2. Khai báo secondary constructor trong Kotlin:

Ta cũng dùng từ khóa constructor để khai báo secondary constructor trong kotlin, ví dụ:

class SinhVien {
constructor()
{
  println("Đây là secondary constructor 0 đối số")
}
constructor(ma:Int,ten:String)
{
  println("Đây là secondary constructor 2 đối số")
 println("Mã=$ma ; Tên =$ten")
}
}

Khai báo sử dụng các secondary constructor:

fun main(args: Array) {
 var teo=SinhVien()
 var lanh=SinhVien(113,"Trần Thị Long Lanh")
}

Khi chạy phần mềm ta có các thông báo sau:

Đây là secondary constructor 0 đối số
Đây là secondary constructor 2 đối số
Mã=113 ; Tên =Trần Thị Long Lanh