# Zugriff auf unterklassen!



## eldios (7. Jun 2006)

hi! ich muss ein programm schreiben für ein fuherpark.
in einer oberklasse stehen infoßs wie typ, farbe, verfügbar usw des Fahrzeugs. in den unterklasse stehen dann usäzliche infos wie zum beispiel welcher kraftstoff, Anzahlsitzplätz usw.

nu hab ich ne verfügbarkeits methode geschrieben(die in der oberklasse steht) welche aufgerufen werde soll mit verfügbar("PKW","Benzin");
das geht irgendwie nicht da ja kraftstoff in einr unterklasse steht(und ich somit keinen vergleich machen kann ob krafstoff auch wirklich Benzin ist)  und daher nicht sichtbar für die oberklasse ist.
Gibt es da irgendeine Lösung?
ihc hoffe ihr versteht mein problem und könnt mir da helfen.........

```
public class Vehikel {

	public String Name;
	public String Farbe;
	public String Zustand;
	public String Kosten;
	public String Verfügbarkeit;
	public int ID=1;
	public int i=0;
	public int j=2;
	public static int GesamtKosten=0;

	//enum Farbe {alle, "rot", gelb, grün, schwarz, weiss, silber, blau, lila};
	static ArrayList<Vehikel> vehikel = new ArrayList<Vehikel>();
	
	enum Typ { alle, KFZ, Bus, LKW, PKW, Motorrad, Velo, Fahrad, Dreirad}
	
	public Vehikel(String n_Name, String n_Farbe, String n_Zustand, String n_Verfügbarkeit)
	{
		this.Name = n_Name;
		this.Farbe = n_Farbe;
		this.Zustand = n_Zustand;
		this.Verfügbarkeit = n_Verfügbarkeit;
		this.ID = id();		
	}
	public int id()
	{
		Vehikel PKW[] = (Vehikel[]) vehikel.toArray(new Vehikel[1000]);
		while(PKW[ i] != null)
			{
				ID = j;
				j++;
				i++;
			}
		return ID;
	}
	public String toString()
	{
		String temp10 = new String();
		temp10 +=  "Name1: " + this.Name + ", Id: " + this.ID +  ", Farbe: " + this.Farbe + ", Zustand: " + this.Zustand  + ", Verfügbarkeit: " + this.Verfügbarkeit;
		return temp10;
	}
public static void verfügbar(String Var, String Var2)
	{
		Vehikel PKW[] = (Vehikel[]) vehikel.toArray(new Vehikel[1000]);
		
		int i=0;
		while(PKW[i] != null)
		{
			if(PKW[i].Name.equals(Var) && PKW[i].Farbe.equals(Var2)&& PKW[i].Zustand.equals("funktionsfähig") && PKW[i].Verfügbarkeit.equals("verfügbar"))
				System.out.println(PKW[i]);
			else if(PKW[i].Name.equals(Var) && PKW[i].Kraftstoff/*Hier liegt der fehler.kennt kein Kraftstoff*/.equals(Var2) && PKW[i].Zustand.equals("funktionsfähig") && PKW[i].Verfügbarkeit.equals("verfügbar"))
				System.out.println(PKW[i]);
			i++;
		}
	}
	
	public static void create()
	{
		vehikel.add(new PKW("PKW", "silber","funktionsfähig", "verfügbar", "Benzin", "300", "5"));
		vehikel.add(new PKW("PKW", "silber","funktionsfähig", "verfügbar", "Benzin", "140", "2"));
		vehikel.add(new Bus("Bus", "silber","funktionsfähig", "verfügbar", "Benzin", "Doppeldecker", "150"));
		vehikel.add(new Bus("Bus", "schwarz","funktionsfähig", "verfügbar", "Benzin", "Normal", "75"));
		vehikel.add(new Bus("Bus", "blau","funktionsfähig", "verfügbar", "Benzin", "Normal", "50"));
		vehikel.add(new LKW("LKW", "schwarz","funktionsfähig", "verfügbar", "Benzin", "21"));
		vehikel.add(new LKW("LKW", "weiß","funktionsfähig", "verfügbar", "Benzin", "18"));
		vehikel.add(new Moped("Mopped", "gelb","funktionsfähig", "verfügbar", "Benzin", "99"));
		vehikel.add(new Moped("Mopped", "schwarz","funktionsfähig", "verfügbar", "Benzin", "750"));
		vehikel.add(new Velo("Fahrrad", "grün","funktionsfähig", "verfügbar"));
		vehikel.add(new Velo("Dreirad", "grün","funktionsfähig", "verfügbar"));
		vehikel.add(new Velo("Roller", "silber","funktionsfähig", "defekt"));
		vehikel.add(new Velo("Roller", "gelb","funktionsfähig", "verfügbar"));
		vehikel.add(new LKW("LKW", "blau","funktionsfähig", "verfügbar", "Benzin", "75"));
	}
	public static void main(String[] args) 
	{
		create();
		verfügbar("KFZ", "Benzin");
		
	}


	
}
```
unterklasse ist: 

```
class KFZ extends Vehikel{

	public String Kraftstoffart;

	
	KFZ(String n_Name, String n_Farbe, String n_Zustand, String n_Verfügbarkeit, String n_Kraftstoffart )
	{
		super(n_Name, n_Farbe, n_Zustand, n_Verfügbarkeit);
		this.Kraftstoffart = n_Kraftstoffart;
		
		
	}
	public String toString()
	{
		String temp = new String();
		temp +=(super.toString() + ", Kraftstoffart: " + this.Kraftstoffart);
		return temp;
	}
}
```

_Dieser Beitrag wurde von L-ectron-X am 07.06.2006 um 10:14 Uhr editiert.
Code-Tags repariert._

_Dieser Beitrag wurde von bummerland am 07.06.2006 um 10:19 Uhr nochmal editiert.
Code-Tags repariert.  _


----------



## Eldaron (7. Jun 2006)

Also, wenn Du mit ner "Oberklasse", und nicht mit nem Interface arbeiten willst, dann musst Du in der auch schon die Variablen deklarieren, die in den Unterklassen öffentlich zugänglich sein sollen.


----------



## eldios (7. Jun 2006)

was ist denn besser? "oberklasse" oder mit interface arbeiten?
bzw wie deklariere ich denn variablen so das ich von der ober auf die unterklassezugreifen kann??


----------



## Eldaron (7. Jun 2006)

wenn Du bei der Oberklasse get/set Methoden für die Attribute hast, und dann mittels


```
unterklasse extends oberklasse
```

arbeitest, sollten die get und set Methoden auch für Instanzen der Unterklassen funktionieren.

Ob Interface oder Vererbung ist n bisschen Geschmackssache, das Interface is quasi der Bauplan, an den sich die Klassen halten müssen, wohingegen die Vererbung ein "ranbasteln" an die bestehende Klasse ist.


----------



## eldios (7. Jun 2006)

könntest du mir ein beispiel geben wie das mit den get und set genau funktioniert oder mir nen link geben wo das beschrieben wird?
in mein buch steh zwar was drüber drinnen aber das peile ich gerade nicht so...
und dank dir für deine antworten


----------



## eldios (7. Jun 2006)

keiner ne ahnung wie ich das machen muss????
ich verzweilfe langsam


----------



## Leroy42 (7. Jun 2006)

Also irgendwie verstehe ich überhaupt nicht, was du vorhast.

Kannst du nicht mal ein einfaches Beispiel geben, was du wo aufrufen
willst und was das Ergebnis sein soll?


----------



## Eldaron (7. Jun 2006)

```
public interface Vehikel
{
    public abstract String getFarbe();
    public abstract void setFarbe(String farbe); // zum Umlackieren ^^
}
```

dann


```
public class Auto implements Vehikel
{

    private String autoFarbe;
 
    public Auto(String farbe)
    {
        autoFarbe = farbe;
    }
    public String getFarbe()
    {
        return autoFarbe;
    }

    public void setFarbe(String farbe)
    {
        autoFarbe = farbe;
    }
}
```

das Prinzip der Getter/Setter ist, dass Du nur darüber auf die Attribute des Objektes zugreifst, und nicht direkt.


----------



## thE_29 (7. Jun 2006)

Eldaron hat gesagt.:
			
		

> Also, wenn Du mit ner "Oberklasse", und nicht mit nem Interface arbeiten willst, dann musst Du in der auch schon die Variablen deklarieren, die in den Unterklassen öffentlich zugänglich sein[/code]
> 
> 
> Wie kann man mit einem Interface vererben?!?


----------

