कोटलिन में एक ही समय में बढ़ाएँ और लागू करें


94

जावा में, आप निम्न कार्य कर सकते हैं:

class MyClass extends SuperClass implements MyInterface, ...

क्या कोटलिन में भी ऐसा ही करना संभव है? मान SuperClassलेना अमूर्त है और लागू नहीं होता हैMyInterface

जवाबों:


149

इंटरफ़ेस कार्यान्वयन और वर्ग विरासत के बीच कोई वाक्यात्मक अंतर नहीं है । :यहाँ दिखाए गए अनुसार एक बृहदान्त्र के बाद सभी प्रकार के अल्पविरामों को अलग करें:

abstract class MySuperClass
interface MyInterface

class MyClass : MySuperClass(), MyInterface, Serializable

एकाधिक वर्ग वंशानुक्रम निषिद्ध है जबकि एक ही वर्ग द्वारा कई इंटरफेस लागू किए जा सकते हैं।


2
तो क्या ऑर्डर मायने रखता है, या क्या कोष्ठक इस बात का ध्यान रखता है कि कौन सा अभिभावक है और कौन से इंटरफेस हैं?
SMBiggs

मैं एक कारण के बारे में नहीं सोच सकता कि आदेश क्यों मायने रखता है। हां, हर अमूर्त वर्ग को बिना काम के इंटरफेस की जरूरत होती है। कंपाइलर जानता है कि क्या आप एक इंटरफ़ेस लागू कर रहे हैं या एक सुपर क्लास का विस्तार कर रहे हैं
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")
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.