Mengganti Method
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Swift di Coddy. Pelajaran 23 dari 57.
Subclass dapat mengganti method yang diwarisi dengan versinya sendiri. Kata kunci override wajib digunakan, sehingga method tidak terganti secara tidak sengaja:
class Animal {
func sound() -> String { "..." }
}
class Dog: Animal {
override func sound() -> String { "Woof" }
}
class Cat: Animal {
override func sound() -> String { "Meow" }
}
print(Dog().sound())
print(Cat().sound())
print(Animal().sound())Output:
Woof
Meow
...super.method() memanggil versi superclass dari dalam override, sehingga subclass dapat menambahkan perilaku pada yang diwarisi, alih-alih menggantikan semuanya:
class Report {
func text() -> String { "Sales: 120" }
}
class SignedReport: Report {
override func text() -> String {
super.text() + " (signed by Ada)"
}
}
print(SignedReport().text())Output:
Sales: 120 (signed by Ada)Property yang dihitung juga bisa ditimpa dengan override var:
class Shape {
var sides: Int { 0 }
var summary: String { "\(sides) sides" }
}
class Triangle: Shape {
override var sides: Int { 3 }
}
print(Triangle().summary)Output:
3 sidesOverride tetap berjalan meskipun method dipanggil dari kode turunan: summary di atas ditulis di Shape, tetapi menggunakan sides milik Triangle. Swift selalu memanggil versi dari object yang sebenarnya, sehingga override berguna:
class Greeter {
func name() -> String { "someone" }
func greet() -> String { "Hello, \(name())" }
}
class AdaGreeter: Greeter {
override func name() -> String { "Ada" }
}
let g: Greeter = AdaGreeter()
print(g.greet())Output:
Hello, AdaTantangan
MudahNotification memiliki method render() yang mengembalikan [info] text. Deklarasikan subclass Warning, yang render()-nya mengembalikan [warn] TEXT (teks dalam huruf kapital), dan Reminder, yang menambahkan minutes tersimpan dan render()-nya mengembalikan hasil superclass diikuti (in 10 min), dengan menggunakan super.
Kode yang disediakan membaca baris info,text, warn,text, atau remind,text,10, membuat object yang sesuai dalam sebuah array berisi Notification, lalu mencetak render() untuk masing-masing object.
Tulis kodemu di Notification.swift, Warning.swift, dan Reminder.swift. main.swift berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
// Kode input/output yang disediakan: biarkan apa adanya
var input: [String] = []
while let line = readLine() { input.append(line) }
var all: [Notification] = []
for line in input {
let p = line.split(separator: ",").map(String.init)
switch p[0] {
case "warn": all.append(Warning(text: p[1]))
case "remind":
let r = Reminder(text: p[1])
r.minutes = Int(p[2])!
all.append(r)
default: all.append(Notification(text: p[1]))
}
}
for n in all { print(n.render()) }
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Class dan Object
Bekerja dengan FileMendefinisikan ClassMethod dan selfInitializerClass adalah ReferensiUlasan: Kartu Perpustakaan4Enkapsulasi
Kontrol AksesHanya Bisa Dibaca dari LuarMelindungi StateInitializer yang Bisa GagalRangkuman: Rekening Bank7Polimorfisme dan Generik
PolimorfismeKonversi TipeFungsi GenerikTipe GenerikRangkuman: Kalkulator Bentuk2Struct dan Tipe Nilai
StructSemantik NilaiMethod yang Mengubah NilaiStruct atau classRangkuman, Item Inventaris11Proyek: Manajemen Perpustakaan
Buku dan AnggotaPeminjaman BukuLatihan sendiri: Playground Swift