Menu
Coddy logo textTech

Instanz- vs. statische Member

Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy. Lektion 17 von 110.

In Dart-Klassen können Mitglieder (Variablen und Methoden) entweder zu einzelnen Objekten oder zur Klasse selbst gehören. Das Verständnis dieses Unterschieds ist grundlegend für die effektive Organisation deines Codes.

Instanzmitglieder gehören zu jedem Objekt, das du erstellst. Jedes Objekt erhält eine eigene Kopie der Instanzvariablen, und Instanzmethoden arbeiten mit den Daten dieses bestimmten Objekts:

class Dog {
  String name;  // Instanzvariable
  
  Dog(this.name);
  
  void bark() {  // Instanzmethode
    print('$name says woof!');
  }
}

Dog dog1 = Dog('Buddy');
Dog dog2 = Dog('Max');

dog1.bark();  // Buddy sagt Wuff!
dog2.bark();  // Max sagt Wuff!

Jedes Dog-Objekt hat seinen eigenen name. Das Ändern des Namens eines Hundes wirkt sich nicht auf den anderen aus.

Statische Mitglieder gehören zur Klasse selbst, nicht zu einem bestimmten Objekt. Sie werden von allen Instanzen gemeinsam genutzt und über den Klassennamen aufgerufen:

class Dog {
  String name;
  static int totalDogs = 0;  // Statische Variable
  
  Dog(this.name) {
    totalDogs++;
  }
}

Dog dog1 = Dog('Buddy');
Dog dog2 = Dog('Max');

print(Dog.totalDogs);  // 2

Die Variable totalDogs wird gemeinsam genutzt – es gibt nur eine Kopie, unabhängig davon, wie viele Dog-Objekte existieren. Du greifst über den Klassennamen Dog.totalDogs darauf zu, nicht über eine Instanz.

challenge icon

Aufgabe

Einfach

Erstelle ein Besucherzählsystem für ein Museum, das sowohl die Besuche einzelner Ausstellungsstücke als auch die Gesamtstatistik des Museums erfasst.

Organisiere deinen Code in zwei Dateien:

  • exhibit.dart: Definiere eine Exhibit-Klasse, die ein Museumsexponat darstellt. Jedes Exponat sollte Folgendes haben:
    • Eine Instanzvariable name (String) für den Namen des Exponats
    • Eine Instanzvariable visitorCount (int), die bei 0 beginnt, um zu erfassen, wie viele Personen dieses bestimmte Exponat besucht haben
    • Eine statische Variable totalVisitors (int), die bei 0 beginnt, um die Gesamtzahl der Besuche über alle Exponate hinweg zu erfassen
    • Einen Konstruktor, der den Namen des Exponats entgegennimmt
    • Eine recordVisit()-Methode, die sowohl visitorCount des Exponats als auch totalVisitors der Klasse erhöht
    • Eine displayStats()-Methode, die die Informationen des Exponats ausgibt
  • main.dart: Importiere deine Exponatklasse und erstelle zwei Exponate:
    • Ein 'Dinosaur Bones'-Exponat
    • Ein 'Ancient Egypt'-Exponat
    Erfasse 3 Besuche beim Dinosaur-Bones-Exponat und anschließend 2 Besuche beim Ancient-Egypt-Exponat. Rufe nach allen Besuchen bei jedem Exponat in der Reihenfolge, in der es erstellt wurde, displayStats() auf und gib anschließend die Gesamtzahl der Besucher über alle Exponate hinweg aus.

Die displayStats()-Methode sollte in diesem exakten Format ausgeben:

[name]: [visitorCount] visitors

Gib für die Zeile mit der Gesamtzahl der Besucher Folgendes aus:

Total museum visitors: [totalVisitors]

Greife über den Klassennamen Exhibit.totalVisitors auf die statische Variable zu.

Erwartete Ausgabe:

Dinosaur Bones: 3 visitors
Ancient Egypt: 2 visitors
Total museum visitors: 5

Probier es selbst

import 'exhibit.dart';

void main() {
  // TODO: Create a 'Dinosaur Bones' exhibit
  
  // TODO: Create an 'Ancient Egypt' exhibit
  
  // TODO: Record 3 visits to the Dinosaur Bones exhibit
  
  // TODO: Record 2 visits to the Ancient Egypt exhibit
  
  // TODO: Rufe displayStats() für jedes Exhibit der Reihe nach auf
  
  // TODO: Print total museum visitors using Exhibit.totalVisitors
  // Format: Total museum visitors: [totalVisitors]
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Dart-Compiler