Abstrakte Klasse (was passiert hier)

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi ich versuch grad einen Programmabschnitt zu verstehen komm aber nicht weiter,
mit dem Thema.

Code:
public class ShortValue extends Value {
private short s; // eigentlicher short-Wert

public ShortValue (short s) { // Konstruktor
	this.s = s;
}

public Value plus(Value v) {// Additions-Methode
	[color=red]ShortValue sv = (ShortValue) v;
	return new ShortValue((short) (s + sv.s))	[/color]
}
public Value times(Value v) {// Multiplikations-Methode
	[color=red]ShortValue sv = (ShortValue) v;
	return new ShortValue((short) (s * sv.s))[/color]
}
public boolean equals(ShortValue zahl) {// Vergleichs-Methode
	return s == zahl.s
}
}

Mir sind die roten Zeilen nicht klar was passiert da oder gemacht wird.
Ich hab keine Ahnung wie man auf diese zwei Zeilen kommt.

gruß
 
Hat nicht unbedingt etwas mit abstrakten Klassen zu tun. Deine Methoden plus() und times() erwarten einen Parameter vom Typ Value. ShortValue ist von Value abgeleitet und damit auch ein Value. Um Methoden aufzurufen, die nur ein ShortValue enthalten sind, aber nicht in Value, muss man casten, das geschieht in diesen zwei Zeilen.

Aber: Schlecht an diesem Code: Es gibt keine Überprüfung, ob der übergebene Wert tatsächlich einen ShortValue darstellt. Vlt. ist. Es kann hier also zu ClassCastExceptions kommen.
 
Das wäre ein gutes Beispiel, um Generics zu verwenden. Der Typecast würde dann überflüssig:

Code:
public abstract class Value<V extends Value<V>>{
  public abstract V plus( V value );
  public abstract V times( V value );
}

Code:
public class ShortValue extends Value<ShortValue> {
private short s; // eigentlicher short-Wert

public ShortValue (short s) { // Konstruktor
	this.s = s;
}

public ShortValue plus(ShortValue sv) {// Additions-Methode
	return new ShortValue((short) (s + sv.s))	[/color]
}
public ShortValue times(ShortValue sv) {// Multiplikations-Methode
	return new ShortValue((short) (s * sv.s))[/color]
}
public boolean equals(Object zahl) {// Vergleichs-Methode
	return s == ((ShortValue)zahl).s;
}
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben