Das beste Swift Vererbung-Tutorial im Jahr 2024. In diesem Tutorial können Sie Basisklasse,Unterklasse,Rewrite (Zwingende),Überschreiben von Methoden und Eigenschaften,Übergeordnete Eigenschaften-Viewer,Prevent Rewrite, lernen

Swift Vererbung

Vererbung kann als eine Klasse verstanden werden wir die Methoden und Eigenschaften einer anderen Klasse zu bekommen.

Wenn eine Klasse von einer anderen Klasse erbt, wird die abgeleitete Klasse eine Unterklasse, die geerbte Klasse namens Superklasse (oder Eltern) genannt

In Swift, können die Klassen aufrufen und die Methoden, Eigenschaften und Tief Skript der übergeordneten Klasse zugreifen, und sie überschreiben können.

Wir können auch Eigenschaften Beobachter geerbte Eigenschaft für die Klasse hinzufügen.


Basisklasse

Keine anderen Klassen erben eine Klasse, rufen Sie die Basisklasse (Basisklasse).

Das folgende Beispiel definieren wir eine Basisklasse StudDetails, beschreibt der Schüler (stName) und alle Fächer Noten (mark1, mark2, mark3):

class StudDetails {
    var stname: String!
    var mark1: Int!
    var mark2: Int!
    var mark3: Int!
    init(stname: String, mark1: Int, mark2: Int, mark3: Int) {
        self.stname = stname
        self.mark1 = mark1
        self.mark2 = mark2
        self.mark3 = mark3
    }
}
let stname = "swift"
let mark1 = 98
let mark2 = 89
let mark3 = 76

print(stname)
print(mark1)
print(mark2)
print(mark3)

Die obige Programmausführung Ausgabe ist:

swift
98
89
76
swift
98
89
76

Unterklasse

Bezieht sich auf eine Unterklasse ist es, eine neue Klasse zu erstellen, basierend auf einer vorhandenen Klasse.

Um die übergeordnete Klasse einer Klasse angeben, Namen der Superklasse auf der Rückseite der Unterklasse Namen geschrieben von (:) Semikolon getrennte Syntax wird wie folgt

class SomeClass: SomeSuperclass {
    // 类的定义
}

Beispiele

Das folgende Beispiel definieren wir eine übergeordnete Klasse StudDetails, dann Unterklasse Tom es erben:

class StudDetails
{
    var mark1: Int;
    var mark2: Int;
    
    init(stm1:Int, results stm2:Int)
    {
        mark1 = stm1;
        mark2 = stm2;
    }
    
    func show()
    {
        print("Mark1:\(self.mark1), Mark2:\(self.mark2)")
    }
}

class Tom : StudDetails
{
    init()
    {
        super.init(stm1: 93, results: 89)
    }
}

let tom = Tom()
tom.show()

Die obige Programmausführung Ausgabe ist:

Mark1:93, Mark2:89

Rewrite (Zwingende)

Subclass können Instanzmethoden vererbt werden, Klassenmethoden, beispielsweise das Eigentum oder die Index-Skript ihre Anpassungsmöglichkeiten zu realisieren, wir nennen dieses Verhalten neu geschrieben (übergeordnete).

Wir können das Schlüsselwort override verwenden Umschreiben zu erreichen.

Zugang übergeordnete Klasse Methoden, Eigenschaften und Index-Skript

Das Verfahren kann das Präfix super super Klasse, das Eigentum oder Index-Skript zugreifen.

umschreiben Zugriffsmethoden, Eigenschaften, Index-Skript
Weg super.somemethod ()
Immobilien super.someProperty ()
Subscript Skript Super [someIndex]

Überschreiben von Methoden und Eigenschaften

Überschreiben von Methoden

In unserer Unterklasse, können wir das Schlüsselwort override verwenden, um die übergeordnete Klasse Methode außer Kraft zu setzen.

Die folgenden Beispiele, schreiben wir die Show () -Methode:

class SuperClass {
    func show() {
        print("这是超类 SuperClass")
    }
}

class SubClass: SuperClass  {
    override func show() {
        print("这是子类 SubClass")
    }
}

let superClass = SuperClass()
superClass.show()

let subClass = SubClass()
subClass.show()

Die obige Programmausführung Ausgabe ist:

这是超类 SuperClass
这是子类 SubClass

Übergeordnete Eigenschaften

Sie können eine benutzerdefinierte Getter (oder Setter) bieten jede geerbte Eigenschaft neu zu schreiben, ob die Eigenschaft zu einem Lagertyp oder Rechen Art der Immobilie vererbt wird.

Subclass weiß nicht, die geerbte Eigenschaft ist der Speichertyp oder die Art der Berechnung, es kennt nur geerbte Eigenschaft wird einen Namen und Typ. So haben Sie eine Eigenschaft neu zu schreiben, ist es notwendig, Namen und Typ abgewertet.

Vorsichtsmaßnahmen:

  • Wenn Sie Setter in Umschreiben Eigenschaften bieten, dann müssen Sie Getter zur Verfügung stellen.

  • Wenn Sie bei der Modifizierung geerbte Eigenschaft Werte Getter neu geschriebene Version nicht wollen, können Sie auf die von super.someProperty geerbten Werte zurückgeben, wo someProperty ist der Name, den Sie die Eigenschaft außer Kraft setzen wollen.

Das folgende Beispiel wir eine Unterklasse von Super Kreis und Rechteck definieren, schreiben wir das Rechteck-Klasse Immobilie:

class Circle {
    var radius = 12.5
    var area: String {
        return "矩形半径 \(radius) "
    }
}

// 继承超类 Circle
class Rectangle: Circle {
    var print = 7
    override var area: String {
        return super.area + " ,但现在被重写为 \(print)"
    }
}

let rect = Rectangle()
rect.radius = 25.0
rect.print = 3
print("Radius \(rect.area)")

Die obige Programmausführung Ausgabe ist:

Radius 矩形半径 25.0  ,但现在被重写为 3

Übergeordnete Eigenschaften-Viewer

Sie können eine Eigenschaft erben Eigentum in den in der Rewrite beobachteten Eigenschaften hinzufügen. Als Ergebnis, wenn die geerbte Eigenschaft Wert ändert, werden Sie überwacht.

Hinweis: Sie können nicht Eigenschaften Beobachter für die ererbten Typ Attribut Konstanten Speicher hinzufügen oder Nur - Lese-Rechen geerbte Eigenschaft.

class Circle {
    var radius = 12.5
    var area: String {
        return "矩形半径为 \(radius) "
    }
}

class Rectangle: Circle {
    var print = 7
    override var area: String {
        return super.area + " ,但现在被重写为 \(print)"
    }
}


let rect = Rectangle()
rect.radius = 25.0
rect.print = 3
print("半径: \(rect.area)")

class Square: Rectangle {
    override var radius: Double {
        didSet {
            print = Int(radius/5.0)+1
        }
    }
}


let sq = Square()
sq.radius = 100.0
print("半径: \(sq.area)")
半径: 矩形半径为 25.0  ,但现在被重写为 3
半径: 矩形半径为 100.0  ,但现在被重写为 21

Prevent Rewrite

Wir können das Schlüsselwort final sie überschrieben verhindert benutzen werden.

Wenn Sie eine endgültige Methode überschreiben, das Eigentum oder die Index-Skript, bei der Kompilierung Fehler.

Sie können die letzte hinzufügen, bevor das Schlüsselwort Klassenmerkmal (letzte Klasse) an die gesamte Klasse ist endgültig markiert, so dass die Klasse nicht vererbt werden kann, wird ansonsten Kompilierungsfehlern gemeldet werden.

final class Circle {
    final var radius = 12.5
    var area: String {
        return "矩形半径为 \(radius) "
    }
}
class Rectangle: Circle {
    var print = 7
    override var area: String {
        return super.area + " ,但现在被重写为 \(print)"
    }
}

let rect = Rectangle()
rect.radius = 25.0
rect.print = 3
print("半径: \(rect.area)")

class Square: Rectangle {
    override var radius: Double {
        didSet {
            print = Int(radius/5.0)+1
        }
    }
}

let sq = Square()
sq.radius = 100.0
print("半径: \(sq.area)")

Aufgrund des obigen Beispiel wird der endgültige Schlüsselwort umschreiben nicht erlaubt ist, so wird die Ausführung angegeben werden:

error: var overrides a 'final' var
    override var area: String {
                 ^
note: overridden declaration is here
    var area: String {
        ^
error: var overrides a 'final' var
    override var radius: Double {
                 ^
note: overridden declaration is here
    final var radius = 12.5
              ^
error: inheritance from a final class 'Circle'
class Rectangle: Circle {
      ^
Swift Vererbung
10/30