CodeBlanks Logo Icon CodeBlanks

Ö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.

Başlangıç kodu

main.dart
// 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

main.dart
// 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

main.dart
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

main.dart
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.

Orta seviye bölümündeki tüm dersler