ขยายและนำไปใช้ในเวลาเดียวกันใน Kotlin


94

ใน Java คุณสามารถทำได้เช่น:

class MyClass extends SuperClass implements MyInterface, ...

เป็นไปได้ไหมที่จะทำสิ่งเดียวกันใน Kotlin? การสมมติSuperClassเป็นนามธรรมและไม่ได้นำไปใช้MyInterface

คำตอบ:


149

ไม่มีความแตกต่างระหว่างประโยคเป็นใช้อินเตอร์เฟซและมรดกระดับ เพียงแสดงรายการประเภททั้งหมดที่คั่นด้วยเครื่องหมายจุลภาคหลังเครื่องหมายจุดคู่:ดังที่แสดงไว้ที่นี่:

abstract class MySuperClass
interface MyInterface

class MyClass : MySuperClass(), MyInterface, Serializable

ห้ามมิให้มีการสืบทอดหลายคลาสในขณะที่อินเทอร์เฟซหลายตัวสามารถใช้งานได้โดยคลาสเดียว


2
คำสั่งมีความสำคัญหรือไม่หรือวงเล็บจะดูแลซึ่งเป็นพาเรนต์และอินเทอร์เฟซใด
SMBiggs

ฉันคิดไม่ออกว่าทำไมคำสั่งถึงมีความสำคัญ ใช่ทุกคลาสนามธรรมจะต้องมี parens ในขณะที่อินเทอร์เฟซทำงานโดยไม่มี คอมไพเลอร์รู้ว่าคุณกำลังใช้งานอินเทอร์เฟซหรือขยาย super class
s1m0nw1

3

นี่คือไวยากรณ์ทั่วไปที่จะใช้เมื่อคลาสกำลังขยาย (คลาสอื่น) หรือใช้งาน (หนึ่งหรืออินเตอร์เฟสที่ให้บริการ):

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")
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.