Mở rộng và triển khai cùng lúc trong Kotlin


88

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ử SuperClasslà trừu tượng và không triển khaiMyInterface

Câu trả lời:


142

Không có sự khác biệt về cú pháp giữa triển khai giao diệnkế 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.


1
Vậy thứ tự có quan trọng không, hay dấu ngoặc đơn quan tâm đến cái nào là cha và cái nào là giao diện?
SMBiggs

Tôi không thể nghĩ ra lý do tại sao thứ tự lại quan trọng. Có, mọi lớp trừu tượng sẽ cần parens trong khi các giao diện hoạt động mà không cần. Trình biên dịch biết liệu bạn đang triển khai giao diện hay mở rộng siêu lớp
s1m0nw1

2

Đâ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")
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.