Computer >> Máy Tính >  >> Lập trình >> Android

Mở rộng lớp dữ liệu trong Kotlin

Lớp dữ liệu là lớp chứa dữ liệu cho một ứng dụng. Nó giống như một lớp POJO mà chúng tôi sử dụng trong Java để lưu giữ dữ liệu.

Trong Java, đối với lớp dữ liệu, chúng ta cần tạo getter setter để truy cập các thuộc tính của lớp đó. Trong Kotlin, khi một lớp được khai báo là lớp dữ liệu, trình biên dịch sẽ tự động tạo một số phương thức hỗ trợ cần thiết để truy cập biến thành viên của lớp. Trình biên dịch sẽ tạo getters người định vị cho các tham số của hàm tạo, hashCode (), equals (), toString (), copy ().

Để một lớp được coi là lớp dữ liệu trong Kotlin, các điều kiện sau phải được đáp ứng -

  • Hàm tạo chính cần có ít nhất một tham số.

  • Tất cả các tham số của hàm tạo chính cần được đánh dấu là val hoặc var .

  • Các lớp dữ liệu không được trừu tượng, mở, niêm phong, hoặc bên trong.

Chúng tôi không thể mở rộng một lớp dữ liệu nhưng để triển khai cùng một tính năng, chúng tôi có thể khai báo một siêu lớp và ghi đè các thuộc tính trong lớp con.

Ví dụ

Trong ví dụ sau, chúng ta sẽ tạo hai lớp dữ liệu "Sinh viên" và "Sách". Chúng ta cũng sẽ tạo một lớp trừu tượng "Resource". Bên trong "Sách", chúng tôi sẽ ghi đè các thuộc tính của lớp "Tài nguyên".

data class Student(val name: String, val age: Int)

fun main(args: Array) {
   val stu = Student("Student1", 29)
   val stu2 = Student("Student2", 30)
   println("Student1 Name is: ${stu.name}")
   println("Student1 Age is: ${stu.age}")
   println("Student2 Name is: ${stu2.name}")
   println("Student2 Age is: ${stu2.age}")
   val b=Book(1L,"India","123222") // implementing abstract class
   println(b.location)
}

// declaring super class
abstract class Resource {
   abstract var id: Long
   abstract var location: String
}

// override the properties of the Resource class
data class Book (
   override var id: Long = 0,
   override var location: String = "",
   var isbn: String
) : Resource()

Đầu ra

Nó sẽ tạo ra kết quả sau -

Student1 Name is: Student1
Student1 Age is: 29
Student2 Name is: Student2
Student2 Age is: 30
India