interface تجاوز القيمة المحددة في الواجهة باستخدام فار مع نفس الاسم المحدد في سوبركلاس




kotlin subclass (2)

هناك فئة قاعدة ( فار يحتاج إلى البقاء محمية):

open class Base(protected var id: Int) {}

هناك واجهة التي تحتاج إلى استخدام فال :

interface ProviderI {
    val id: Int
}

وهناك أيضا فئة التي ترث من قاعدة وتنفذ واجهة بروفيدري. داخل الذي أحاول تنفيذ واجهة واجهة باستخدام سوبر فاراس (الذي له نفس الاسم). كمثال لا يعمل، أحاول أن أفعل شيئا من هذا القبيل (مثال لا يعمل):

class Instance(id: Int): Base(id), ProviderI {
    override val id
        get() { return super.id }
}

الفكرة بسيطة ولكن لقد حاولت كل شيء وكل مرة يتم الإبلاغ عن خطأ مختلف.


لتجاوز عضو موجود في عدة أنواع، يتطلب كوتلين أن يكون open في جميع الأنواع ، وهذا التقييد يبدو طبيعيا جدا، لأنه بخلاف ذلك يمكن تجاوز الأعضاء final بسهولة بهذه الطريقة.

الحل هو جعل id مفتوح في Base وكذلك وتجاوزها كموقع var :

open class Base(protected open var id: Int)

interface ProviderI {
    val id: Int
}

class Instance(id: Int): Base(id), ProviderI {
    override var id: Int
        get() = super.id
        set(value) { super.id = value }
}

كوتلين لا يسمح خصائص val لتجاوز خصائص var .

أقرب شيء من شأنها أن تعمل:

open class Base(protected open var id: Int) {}

interface ProviderI {
    val id: Int
}

class Instance(id: Int): Base(id), ProviderI {
    override var id: Int = 0
        get() { return super.id }
}




superclass