2017-08-12 2 views
0

Ich habe gerade meine erste Android-Bibliothek erstellt. Bei einer anderen Anwendung möchte ich eine Klasse aus dem it erweitern. Aber es zeigt mir einen Fehler: "Kann nicht vom letzten 'library.com.kukaintro.activities.KukaIntro'" ausgehen. enter image description hereKann nicht von der finalen Klasse erben

enter image description here

Wie Sie keine der Superklassen sehen können, sind endgültig. Wenn ich auf die Superklasse KukaIntro klicke (in der App nicht in der Bibliothek) steht dabei: enter image description here

Dies ist das erste Mal, dass ich eine Bibliothek erstelle. Kann mir jemand zeigen, wie ich das Problem beheben kann?

+2

nicht Screenshots anwenden. Code ist Text, also poste ihn als formatierten Text in deiner Frage! – GhostCat

+0

Hallo. Bitte lesen Sie https://stackoverflow.com/help/how-to-ask und geben Sie dann ein minimales, vollständiges und überprüfbares Beispiel Ihres Codes oder was Sie bisher getan oder versucht haben, um das Problem zu lösen. – SherylHohman

Antwort

7

In Kotlin sind im Gegensatz zu Java standardmäßig alle Klassen implizit als final markiert. Wenn Sie von einer Klasse erben möchten, müssen Sie vor der Klassendeklaration das Schlüsselwort open explizit hinzufügen.

open class Base(p: Int) { 

} 

Wenn Sie Funktionen aus der Superklasse außer Kraft setzen möchten, wieder haben Sie die open Schlüsselwort auf diese Funktionen in der Super-Klasse hinzuzufügen, und das override Schlüsselwort ist für die überschriebene Funktion in der Unterklasse obligatorisch.

Beispiel aus dem doc:

open class Foo { 
    open fun f() { println("Foo.f()") } 
    open val x: Int get() = 1 
} 

class Bar : Foo() { 
    override fun f() { 
     super.f() 
     println("Bar.f()") 
    } 

    override val x: Int get() = super.x + 1 
} 

Kotlin docs: https://kotlinlang.org/docs/reference/classes.html#inheritance

Hier ist die Diskussion über diese Sprache Design: https://discuss.kotlinlang.org/t/classes-final-by-default/166

+0

Danke, aber können Sie mir genauer helfen? Klasse KukaIntro erweitert KukaIntroBase. Sollte ich "open" eingeben, bevor ich KukaIntroBase deklariere? Wenn ich dies tue, sagt Android Studio: "Modifier open ist redundant, weil abstrakt vorhanden ist". –

+0

Fügen Sie der KukaIntro-Klasse 'Öffnen' hinzu. – Bob

+0

Wenn es funktioniert, würdest du es bitte als richtig markieren. – Bob

Verwandte Themen