Overriding

xyZman

Bekanntes Mitglied
Hi,
Habe in einer Stackklasse folgende Methode
Java:
	boolean push(String value) {
		if (!this.isFull()) {
			this.store[++this.current] = value;
			
			return true;
		} else {
			return false;
		}
	}
Nun habe ich eine neue Klasse angelegt die von dieser Stackklasse erbt.
Dort habe ich eine neue ergänzende Methode geschrieben die einfach zählen soll wie oft ich push aufrufe. Dazu soll ich die Methode Push überschreiben.
Java:
class ZaehleStack extends Stackklasse {
	
	public ZaehleStack(int size){
		super(size);
	}
		int zaehlepush(){
			//Overriding
			 
				
			}

Ich weis grade absolut nicht weiter.
Normalerweise überschreibe ich die Methode einfach aber hier meckert er immer.


lg
 
M

maki

Gast
Java:
...

private int counter;

public boolean push(String value) {
    counter++;
    return super.push(value);
}

public int getCount() {
    return counter;
}
 

xyZman

Bekanntes Mitglied
Hallo, habe es nun so gemacht. Habe eigentlich nur die gleiche Methode eingebaut+ nen Zähler der bei Erhöhung mitgeht.. was meint ihr ?
Java:
class ZaehleStack extends Stackklasse {
	public int zaehler=0;
	public ZaehleStack(int size){
		super(size);
	}
	int ZaehlePush(){
		
		
		return zaehler;
		
			
		
	}
			boolean push(String value) {
				if (!this.isFull()) {
					this.store[++this.current] = value;
					zaehler+=1;
					return true;
				} else {
					return false;
				}
			
						
		}
		
		
	}
 

pausch

Aktives Mitglied
Maki hat allerdings eine Sache übersehen, der counter muss initialisiert werden:
Java:
 private int counter = 0;
 

xyZman

Bekanntes Mitglied
Wenn ich dann aber 8 mal pushe bekomme ich 9 raus.. und das Ergebnis mit return counter-1 zu bearbeiten habe ich nicht vor.

Edit: Okay habe einfach if(!isFull()){ counter++ } eingebaut. Nun geht's.
danke !
 
Zuletzt bearbeitet:

pausch

Aktives Mitglied
Interessante Sache mit dem Auto-initialisieren von JAVA, gut zu wissen. Ist wahrscheinlich wirklich Geschmackssache, -> mein Geschmack ist es nicht ;)
 

pausch

Aktives Mitglied
Ich finde es schöner, wenn man sieht was initialisiert wird. In der Regel werden ja Klassen auch als null initialisiert, was standardmäßig zu Fehlern führt. Warum sollten Primitive Datentypen da bevorzugt werden und nicht zu fehlern führen.

Da kann man auch bei anderen Objekten "mal eben so" den Standardkonstruktor ausführen und ein Objekt anlegen.
 

hdi

Top Contributor
Interessante Sache mit dem Auto-initialisieren von JAVA, gut zu wissen. Ist wahrscheinlich wirklich Geschmackssache, -> mein Geschmack ist es nicht
Schließe mich da an. Eine explizite Zuweisung impliziert nun mal die Absicht, diese Variable mit dem Default-Wert zu initialisieren. Wenn nix dasteht müsste man sich nun erstmal durch den/die Konstruktor(en) wühlen, um herauszufinden ob da irgendwas zugewiesen wird oder nicht.
 

hdi

Top Contributor
Naja sofern der TO selbst das ganze zum OT macht ist das denk ich noch akzeptabel. Immerhin hat er ja gefragt "warum das?".
 

pausch

Aktives Mitglied
Du hast ja so recht. Dann machen wir mal weiter:

Ich finde wirklcih das automatische Initialisieren von int-Werten vergleichbar als wenn automatisch der Standardkonstruktor von anderen Klassen ausgeführt wird. Wodurch ist denn diese Primitivtyp-auto-initialisierung zu rechfertigen?
 

hdi

Top Contributor
Ich finde wirklcih das automatische Initialisieren von int-Werten vergleichbar als wenn automatisch der Standardkonstruktor von anderen Klassen ausgeführt wird
Aus Design-Sicht durchaus vergleichbar, ja.

Wodurch ist denn diese Primitivtyp-auto-initialisierung zu rechfertigen?
Naja scheinbar hat man sich dazu entschieden Instanz-Variablen automatisch zu intialisieren. Auch das Zuweisung von null bei komplexen Typen ist ja eine Initialisierung. Und da du primitiven Typen kein "null" zuweisen kannst, tja was dann.. -1234? Ist auch nicht besser als 0. Man hat halt einen Wert gewählt, der noch am ehesten Sinn macht. Trifft übrigens nicht nur auf int zu. Alle primitiven Zahlen-Typen werden mit 0 initialisiert, boolean mit false.

Warum man diese Auto-Initialisierung überhaupt vornimmt, und nicht wie bei lokalen Variablen sagt, dass sie halt explizit initialisiert werden müssen (egal ob primitiv oder komplex), keine Ahnung!
 
Zuletzt bearbeitet:

hdi

Top Contributor
Ja, dieses Forum rockt :toll: Wenn man es drauf ansetzt kann man jeden Tag etwas Neues lernen, auch wenn man schon seit 3 Jahren hier unterwegs ist.
 

Neue Themen


Oben