Dart
Özet - Kalıtım
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.
Örnek çözümü göster
// 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());
}
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.
Örnek çözümü göster
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());
}
Kendini test et
-
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
Cevabı göster
Somut alt sınıflar area() metodunu override etmek zorundadır — Soyut metot, somut alt sınıfta override edilmeden somut sınıf olamaz.
Sıradaki ders: Modül tasarımı