Özet - Kalıtım
- Dart kursu
- Orta seviye
- Ders 12/116
- 5 dk
extends, super ve override'ı birleştirerek bir şekil hiyerarşisi yazarsın.
Özet - Kalıtım
Bu grupta kalıtımın temel yapı taşlarını gördün: extends, super, @override, abstract ve implements. Şimdi bunları bir şekil hiyerarşisinde birleştireceğiz.
Bir abstract class Shape soyut bir sözleşme kurar; Square ve Circle somut alt sınıfları bu sözleşmeyi doldurur. extends miras alır, @override metodu yeniden tanımlar, super üst yapıcıyı çağırır. İki alt sınıf da aynı area sözleşmesini paylaşır ama her biri kendi alan hesabını yazar. Bu, çok biçimliliğin temelidir.
Uygulama Shape ve Square yaz
abstract class Shape { double area(); } tanımla. Square adında, Shape'ten miras alan bir sınıf yaz; final double side alanını ve Square(this.side) yapıcısını ekle. @override double area() => side * side; metodunu yaz. main içinde var s = Square(3); ile örnek oluştur ve print(s.area()) çağrısı yap.
Başlangıç kodu
// Shape soyut sınıfını ve Square alt sınıfını tanımla
void main() {
// Square(3) örneği oluştur ve s.area() yazdır
}Örnek çözüm
// Shape soyut sınıfını ve Square alt sınıfını tanımla
abstract class Shape {
double area();
}
class Square extends Shape {
final double side;
Square(this.side);
@override
double area() => side * side;
}
void main() {
var s = Square(3);
print(s.area());
}Beklenen çıktı
9.0
Circle alt sınıfını ekle
İkinci adımda hiyerarşiye bir alt sınıf daha ekleyeceğiz: Circle. Aynı Shape sözleşmesini paylaşır ama farklı bir alan hesabı yazar. Bu, çok biçimliliğin gücünü gösterir.
Örnek: class Circle extends Shape { final double radius; Circle(this.radius); @override double area() => 3.14 * radius * radius; }. main içinde hem Square hem Circle örneği Shape referansıyla tutulabilir; her biri kendi area sürümünü çalıştırır. Bu şekilde ortak sözleşme, farklı davranışlarla bir arada durur.
Uygulama Circle alt sınıfını ekle
Var olan Shape soyut sınıfını ve Square alt sınıfını koru. Circle adında, Shape'ten miras alan bir alt sınıf ekle; final double radius alanını, Circle(this.radius) yapıcısını ve @override double area() => 3.14 * radius * radius; metodunu yaz. main içinde var c = Circle(2); ile örnek oluştur ve print(c.area()) çağrısı yap.
Başlangıç kodu
abstract class Shape {
double area();
}
class Square extends Shape {
final double side;
Square(this.side);
@override
double area() => side * side;
}
// Circle alt sınıfını ekle
void main() {
// Circle(2) örneği oluştur ve c.area() yazdır
}Örnek çözüm
abstract class Shape {
double area();
}
class Square extends Shape {
final double side;
Square(this.side);
@override
double area() => side * side;
}
class Circle extends Shape {
final double radius;
Circle(this.radius);
@override
double area() => 3.14 * radius * radius;
}
void main() {
var c = Circle(2);
print(c.area());
}Beklenen çıktı
12.56
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir Shape abstract sınıfı için hangisi doğrudur?
- alt sınıflar extends kullanamaz
- Shape() ile doğrudan örnek alınabilir
- area() gövdesi Shape içinde yazılır
- Somut alt sınıflar area() metodunu override etmek zorundadır Doğru cevap
Açıklama: Soyut metot, somut alt sınıfta override edilmeden somut sınıf olamaz.