Kế thừa là sự liên quan giữa hai class với nhau, trong đó có class cha (superclass) và class con (subclass). Khi kế thừa class con được hưởng tất cả các phương thức và thuộc tính của class cha. Tuy nhiên, nó chỉ được truy cập các thành viên public và protected của class cha. Nó không được phép truy cập đến thành viên private của class cha.
Tư tưởng của kế thừa trong java là có thể tạo ra một class mới được xây dựng trên các lớp đang tồn tại. Khi kế thừa từ một lớp đang tồn tại bạn có sử dụng lại các phương thức và thuộc tính của lớp cha, đồng thời có thể khai báo thêm các phương thức và thuộc tính khác.

Bài toán: Trong Clean Architecture, khi ứng dụng bắt đầu call API và nhận về một data model (gọi đây là raw data: là data chưa hoàn chỉnh, chưa phù hợp với business). Nên ta cần phải map qua một dớp model khác hoàn chỉnh và phù hợp với business (goi đây là domain model). Vậy ta áp dụng tính kế thừa như thế nào?
Đầu tiên, tạo lớp class UserModel . Lớp domain model là lớp hoàn chỉnh, data mà ứng dụng đang cần.
// Domain Model
abstract class BaseModel
class UserModel(val fullName: String) : BaseModel()
Tiếp theo, tạo lớp UserRaw . Lớp raw data chưa hoàn chỉnh.
// Raw Model
abstract class BaseRaw<BM : BaseModel> {
abstract fun raw2Model(): BM
}
class UserRaw(private val firstName: String, private val lastName: String) : BaseRaw<UserModel>() {
override fun raw2Model(): UserModel {
return UserModel(fullName = "$firstName $lastName")
}
}
Tính kế thừa của đoạn code trên thể hiện ở:
UserModel kế thừa từ lớp trừu tượng BaseModelUserRaw kế thừa từ lớp trừu tượng BaseRawBM : BaseModel tham số truyền vào của BaseRaw là BM được kế thừa từ lớp trừu tượng BaseModelUserRaw đều có các thuộc tính của lớp cha raw2Model()Cùng là bài toán này, sẽ đề cập sâu hơn trong hai bài tới: Tính đa hình và tính trừu tượng.