Laden...

Verständnisfrage Klassen u. Vererbung

4 Antworten
1,188 Aufrufe
Letzter Beitrag: vor 18 Jahren
Verständnisfrage Klassen u. Vererbung

Basisklasse

  // Basisklasse Vehicle
  public class Vehicle {

    private string baseColor = String.Empty;
    private double maxSpeed = 0.0;
    private double currentSpeed = 0.0;

    public string BaseColor {
      get { return this.baseColor; }
      set { this.baseColor = value; }
    }

    public double MaxSpeed {
      get { return this.maxSpeed; }
      set { this.maxSpeed = value; }
    }

    public double CurrentSpeed {
      get { return this.currentSpeed; }
      set { this.currentSpeed = value; }
    }

    public Vehicle() { }

  }

Unterklasse Landvehicle


// Das Landfahrzeug
class LandVehicle : Vehicle {

  private int wheels = 4;

  public int Wheels {
    get { return this.wheels; }
    set { this.wheels = value; }
  }

  public LandVehicle() { }

  public LandVehicle( string baseColor, int wheels ) {

    this.wheels = wheels;
    this.BaseColor = baseColor;
  }
}
  1. Die klasse Vehicle ist ja in diesem fall eigentlich abstrakt oder? Ich kann ja kein Objekt Vehicle erzeugen (also könnte ja, aber wäre doch sinnlos?).

  2. LandVehicle lv = new LandVehicle("Rot",4); // so leg ich ein Landvehicle an

------- soweit ist diese Klasse okay -------
jetz ein anderes Beispiel wo ich nicht ganz verstehe:

Ich will ein Auto bauen. Jedes (normale^^) Auto hat doch einen Motor.


AUTO
   |    \
MOTOR |Sitze

  1. Also ist doch der Motor eine Unterklasse?
  2. Wenn ich jetzt ein Objekt Auto erzeuge ist aber nicht der Motor mit erstellt worden
  3. Der umgekehrte Weg, ich lege einen Motor an dann wird ein Objekt Auto mit erstellt. (Motor m = new Motor()😉

Ich möchte doch eigentlich nur das Problem unter 2. beseitigen, sprich wenn ich ein Auto Bmw1 = new Auto(); anlege dass mir auch alle unterteile erstellt werden... oder hab ich da einen falschen Denkansatz?


class Auto{
...
}

class Motor:Auto{
...
Motor(string sZylinder){
...
}


hoffe da blickt jemand durch ^^

Mfg Michael

Eine Generalisierung/Spezialisierung (Vererbung) deutet immer eine Ist-Ein Beziehung an, d.h. ein LandVehicel ist ein Vehicel.

Laut deiner Aussage gilt also folgendes:
ein Motor ist ein Auto.

Stimmt aber nicht: Ein Auto besteht aus einem Motor. (Wir nehmen mal nur deinen Speziellen Fall, das Motor und Auto immer zusammen sind. Werksprozesse und so ignorieren wir.)

Um eine "besteht aus" Verbindung zu beschreiben gibt es die Komposition. Diese kann wie folgt in C# abgebildet:


public class Auto
{
  public Motor Motor
  {
    get
    {
       if(this.m_motor==null)
       {
          this.m_motor = new Motor();
       }
       return this.m_motor;
    }
  }
}

Original von JuyJuka

  
public class Auto  
{  
  public Motor Motor  
  {  
    get  
    {  
       if(this.m_motor==null)  
       {  
          this.m_motor = new Motor();  
       }  
       return this.m_motor;  
    }  
  }  
}  
  

Heißt das wenn ich hier in der Komposition ein Auto anlege erstellt es mir einen Motor mit?

Auto car = new Auto();
car.Motor = "4 Zylinder";

Achja in der Zeile "public Motor Motor" muss da ein ':' zwischenrein?
Ist das dann eine Funktion die eine Instanz Motor erstellt?

Danke dir für die fixe antwort!

Mfg Michael

Mein Quellcode ist soweit richtig. Das ist ein Property (lies mal das Openbook über C#), das ist ein normales Sprachkonstrukt von C#!

Das Property erstellt dann immer die Instanz von Motor für dieses spezielle Auto.

Schreib mir doch deine ICQ/xfire/Skype Adresse per PN, dann geht das alles viel flüssiger.