Trong Java, bạn có thể làm những việc như sau:
class MyClass extends SuperClass implements MyInterface, ...
Có thể làm điều tương tự trong Kotlin không? Giả sử SuperClass
là trừu tượng và không triển khaiMyInterface
Câu trả lời:
Không có sự khác biệt về cú pháp giữa triển khai giao diện và kế thừa lớp . Chỉ cần liệt kê tất cả các loại được phân tách bằng dấu phẩy sau dấu hai chấm :
như được hiển thị ở đây:
abstract class MySuperClass
interface MyInterface
class MyClass : MySuperClass(), MyInterface, Serializable
Kế thừa nhiều lớp bị cấm trong khi nhiều giao diện có thể được thực hiện bởi một lớp.
Đây là cú pháp chung để sử dụng khi một lớp đang mở rộng (một lớp khác) hoặc triển khai (một hoặc các giao diện phục vụ):
class Child: InterfaceA, InterfaceB, Parent(), InterfaceZ
Lưu ý rằng thứ tự của các lớp và giao diện không quan trọng.
Ngoài ra, hãy lưu ý rằng đối với lớp được mở rộng, chúng ta sử dụng dấu ngoặc đơn, dấu ngoặc đơn đề cập đến hàm tạo chính của lớp cha. Do đó, nếu hàm tạo chính của lớp cha nhận một đối số, thì lớp con cũng phải truyền đối số đó.
interface InterfaceX {
fun test(): String
}
open class Parent(val name:String) {
//...
}
class Child(val toyName:String) : InterfaceX, Parent("dummyName"){
override fun test(): String {
TODO("Not yet implemented")
}
}