ใน Java คุณสามารถทำได้เช่น:
class MyClass extends SuperClass implements MyInterface, ...
เป็นไปได้ไหมที่จะทำสิ่งเดียวกันใน Kotlin? การสมมติSuperClass
เป็นนามธรรมและไม่ได้นำไปใช้MyInterface
ใน Java คุณสามารถทำได้เช่น:
class MyClass extends SuperClass implements MyInterface, ...
เป็นไปได้ไหมที่จะทำสิ่งเดียวกันใน Kotlin? การสมมติSuperClass
เป็นนามธรรมและไม่ได้นำไปใช้MyInterface
คำตอบ:
ไม่มีความแตกต่างระหว่างประโยคเป็นใช้อินเตอร์เฟซและมรดกระดับ เพียงแสดงรายการประเภททั้งหมดที่คั่นด้วยเครื่องหมายจุลภาคหลังเครื่องหมายจุดคู่:
ดังที่แสดงไว้ที่นี่:
abstract class MySuperClass
interface MyInterface
class MyClass : MySuperClass(), MyInterface, Serializable
ห้ามมิให้มีการสืบทอดหลายคลาสในขณะที่อินเทอร์เฟซหลายตัวสามารถใช้งานได้โดยคลาสเดียว
นี่คือไวยากรณ์ทั่วไปที่จะใช้เมื่อคลาสกำลังขยาย (คลาสอื่น) หรือใช้งาน (หนึ่งหรืออินเตอร์เฟสที่ให้บริการ):
class Child: InterfaceA, InterfaceB, Parent(), InterfaceZ
โปรดทราบว่าลำดับของคลาสและอินเทอร์เฟซไม่สำคัญ
นอกจากนี้โปรดสังเกตว่าสำหรับคลาสที่ขยายเราใช้วงเล็บนั้นวงเล็บของคุณหมายถึงตัวสร้างหลักของคลาสแม่ ดังนั้นหากตัวสร้างหลักของคลาสพาเรนต์ใช้อาร์กิวเมนต์คลาสลูกก็ควรส่งผ่านอาร์กิวเมนต์นั้นด้วย
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")
}
}