überschreiben von methoden

Status
Nicht offen für weitere Antworten.

gruenerblob

Mitglied
hallo alle zusammen!
bin noch ein ziemlicher anfänger in java und hab mir dabei etz scho stundenlang den kopf zermartert. hoffe ihr könnt mir dabei weiterhelfen.

also ich machs gleich konkret:
ich habe eine methode innerhalb einer klasse A:
public String getGender(){return "?";}
die mir eben da ein ? zurückgibt.
jetzt möchte ich in einer Unterklasse diese Methode überschreiben. Sodass sie mir statt ? ein M zurückgibt.
habe die klasse auch erweitert
public class B extends B {
und dann
public String getGender() {return "M";}
geschrieben.
aber ich bekomm immer noch ein ? wenn ich des ausführ.
wie gesagt bin noch ein anfänger und weiß net ob das als info reicht. poste bei bedarf auch mehr.
Danke euch schonmal im vorraus
 

sliwalker

Top Contributor
Hi,

ich wette Du hast ein Objekt vom Typ A erstellt und abgefragt. ;)
Außerdem, wenn es stimmt was da steht erbt B von B??

Erzeug ein Objekt der Klasse B, dann klappts auch.

greetz
SLi
 

gruenerblob

Mitglied
ups sorry mein fehler
public class B extends A {

so isses richtig.

boah des ging ja wirklich flott mit der antwort ;)
ich probier noch mal n bissl rum vielleicht klappts ja irgendwann ;;)

gruß
 

sliwalker

Top Contributor
Hi,

das ist immer am besten.
Je länger Du Dich mit einem fehler beschäftigst, desto höher ist der Lerneffekt.
Aber irgendwann sollte man Fragen, sonst wirds deprimierend :)

greetz
SLi
 

gruenerblob

Mitglied
ja genauso gehts mir im moment...mittlerweile sinds 3 oder mehr stunden und ich komm einfach net drauf warum des net geht.
im eclipse zeigt er mir au an dass ich die methode überschreib aber irgendwie...macht ers net
 
Zuletzt bearbeitet:

sliwalker

Top Contributor
Hi,

vergleich mal:
Java:
public class MainController {

    
    public static void main(String[] args) {
	
	Ding ding = new Ding("Hans");
	System.out.println(ding.getGender()); // Ausgabe ?
	
	
	DingsBums dingsbums = new DingsBums("Meiser");
	System.out.println(dingsbums.getGender()); // Ausgabe m
    }
    
}



Java:
public class Ding {

    private String name;
   
    
    public Ding(String name) {
	name = name;
    }
    
    public String getGender() {
	return ("?");
    }
}



Java:
public class DingsBums extends Ding {

    
    public DingsBums(String name) {
	super(name);
    }
    
    public String getGender() {
	return("m");
    }
}


Wie schon gesagt, ein Objekt von B erstellen.
Eine kleine Transferleistung überlasse ich Dir noch.

greetz
SLi
 

gruenerblob

Mitglied
hiho nochmal ich!

ok ähm ich hoff ich find die richtigen worte bin wie gesagt noch net so firm und steh wahrscheinlich etz scho wieder komplett aufm schlauch. (werd glaub langsam wahnsinnig;))

also
in deinem beispiel isses eigentlich klar, weil du ja eigentlich dann dingsbums ansprichst und dann M rauskommt.

bei mir isses so
im MainController wird nur ein objekt vom Typ A erstellt. mehr soll ich da auch nicht erstellen.

also und wenn ich des so ausführ kommt ein ?
und wenn ich dann in dingsbums die methode überschreib soll bei dem selben objekt stattdessen ein m hinkommen.

sorry wenn ich irgendwie stuss schrieb aber ich kann grad irgendwie überhaupt nimmer klar denken.
kann dir au den kompletten code per pm zukommen lassen. glaub wir reden aneinander vorbei. wie gesagt bin noch neu und kenn mich noch net so ganz aus, bzw tu mich noch a weng hart mit ner genauen problembeschreibung.
 
Zuletzt bearbeitet:

sliwalker

Top Contributor
Naja sicher passiert das.
Und ehrlich gesagt macht man es ja auch so.

Poste mal Deinen Code bitte....
 

gruenerblob

Mitglied
ich habs dir als pm geschickt. wollte des etz net öffentlich machen. werd dann aber hier noch n paar zeilen dazu schreiben wenn ich des problem gelöst hab.
 

sliwalker

Top Contributor
Hi,

öffentlich ist der Sinn eines Forums.
Wenn es geht, poste es noch. Und schließ java code in java-Tags mit eckigen Klammern ein.

Zu Deinem Code.
Du hast doch ein Objekt vom Typ Female und Male. (evelin und ubk1)
Auf genau diesen Objekten musst Du auch getGender aufrufen. Wo auch sonst?
Die Klasse Human stellt alles bereit, was die Menschen gemeinsam haben. Also nicht als Wert, sondern als Eigenschaft. Ein Auto hat vier Reifen, auch wenn es die Größen 145/R13 oder 225/R18 sind. Ein Vogel hat einen Schnabel, auch wenn er rot, braun, gelb oder sonst was sein kann. Ein Mensch hat ein Geschlecht...

Du erstellst kein Objekt vom Typ Human, weil Human zu ungenau ist. Deshalb von den Spezialisierungen Female und Male. Und die Methoden hast Du richtig überschrieben. Aber ganz natürlich, wird immer die Methode aufgerufen, von dem Objekt, was Du erstellst. Welche auch sonst? Überschreibst Du getGender nicht, wird die der Oberklasse aufgerufen.

Warum macht man das?
Andernfalls müsstest Du sowohl in Female als auch in Male alle Eigenschaften auflisten, also zwemal das exakt selbe definieren. Das kann fehleranfällig sein. Dazu kommt noch, wenn plötzlich Polygamie erlaubt wird, musst Du die "Partner" Eigenschaft an beiden Stellen ändern. Das ist Aufwand und birgt zweimal Fehlerpotenzial.
Also, alle gemeinsamen Eigenschaften nur an eine Stelle und erben lassen, damit die Subklassen diese Eigenschaften automatisch auch haben...

Klar?
Sonst frag nochmal...zehn Minuten bin ich noch da :)

greetz
SLi
 

gruenerblob

Mitglied
hey super danke für die super antwort werd mich da gleich noch ganz durchbeißen
aberbei (evelin und ubk1) darauf soll ich eigentlich noch nichst aufrufen.
die ausgabe soll hier erst

Albert (23 Jahre, M)
Minerva(22 Jahre, W)
Albert (23 Jahre, M); verheir,,,
Minerva(23 Jahre, W); verheiratet....
sein. wenn ich TestFamily.java ausführ
evelin und ubk1 kommen da eigentlich noch gar net vor.

und im moment hab ich statt M und W überall noch fragezeichen
 
Zuletzt bearbeitet:

sliwalker

Top Contributor
Hi nochmal,

Java:
public static void main(String[] args){
Human minerva = new Human("Minerva", 22);
Human albert = new Human("Albert", 23);

System.out.println(albert);
System.out.println(minerva);
minerva.celebrateBirthday();

if (!minerva.marry(albert)){
System.out.println("Keine Heirat");
}

System.out.println(albert);
System.out.println(minerva);
System.out.println(albert.getGender());
}
}

Du wirst immer ein Fragezeichen bekommen, weil die Objekte vom Typ Human sind.
Punkt.

Wenn Du m und w haben willst, müssen minerva und albert Objekte von Female oder Male werden.

greetz
SLi
 

gruenerblob

Mitglied
hier ist mal der Code also aufgabenstellungen sind folgende:
konstruktor der klasse human implementieren. das is soweit klar.
als nächstes getName() getAge() und celebrateBirthday() und die methode marry() implementieren.
soweit auch alles klar
die Ausfabe bei ausführung soll nun
Albert (23 Jahre, ?)
Minerva( 22 Jahre, ?)
Albert (23 Jahre, ?); verheiratet mit Minerva
Minerva (23 Jahre, ?); verheiratet mit Albert
sein. soweit is bei mir alles klar.
jetzt soll ich aber die beiden klassen male und female ergänzen, dass sie human erweitern. soweit auch noch klar, aber dann soll ich die Methode getGender() in Male und Female so überschreiben, dass ich bei Ausführung von TestFamily statt der ? jeweils entweder ein M oder ein W herbekomm.
hab leider keine ahnung wie ich das machen soll. hab die methode in male und female überschrieben mit
Code:
public String getGender() {
		return ("M");
aber bekomm immer noch fragezeichen.




Code:
import people.Human;
import people.Male;
import people.Female;
public class TestFamily{
	public static void main(String[] args){
		Human minerva = new Human("Minerva", 22);
		Human albert = new Human("Albert", 23);
		
		System.out.println(albert);
		System.out.println(minerva);
		minerva.celebrateBirthday();
		
		if (!minerva.marry(albert)){
			System.out.println("Keine Heirat");
		}
		
		System.out.println(albert);
		System.out.println(minerva);
	}
}


Code:
package people;

//Eine spezielform eines Menschen
public class Female{
	
}

Code:
package people;

//Eine weitere spezielform eines Menschen
public class Male{
	
}

Code:
package people;

import people.Human;

//Ein Mensch
public class Human{
	//Erzeugt einen neuen Menschen mit angegebenen Namen und Alter als Waise
	public Human(String name, int age){
		//ZU IMPLEMENTIEREN
	}	
	
	//Erzeugt einen neuen Menschen mit angegebenen Namen. Das Alter soll 0 sein. 
	//Die Eltern müssen in die entsprechenden Instanzvariablen geschrieben werden
	protected Human(String name, Human mother, Human father){
		//ZU IMPLEMENTIEREN
	}
	
	//gibt den Namen zurueck
	public String getName() { 
		//ZU IMPLEMENTIEREN 
		return "";
	}
	
	//gibt das Alter zurueck
	public int getAge() { 
		//ZU IMPLEMENTIEREN 
		return 0;
	}
	
	//Erhoeht das Alter um ein Jahr
	public void celebrateBirthday(){
		//ZU IMPLEMENTIEREN
	}
	
	//Traegt den angegebenen Menschen als Partner ein.
	//Beachten Sie dass man...
	//    ... nicht zweimal heiraten darf
	//    ... nicht sich selbst heiraten darf
	//    ... einen gueltigen Partner braucht (parameter!=null)
	//Die Methode soll nur dann true zurueckgeben falls 
	//eine Heirat stattfand
	public boolean marry(Human partner){
		//ZU IMPLEMENTIEREN
		return false;
	}
	
	//================================================================
	// AB HIER BITTE NICHTS VERAENDERN
	//================================================================
		
	//Name diese Menschen
	protected String name;
	
	//Aktuelles Alter
	protected int age;
	
	//Der Lebenspartner
	protected Human partner;
	
	//Vater diese Menschen
	protected Human father;
	
	//Mutter diese Menschen
	protected Human mother;
	
	//Gibt das Geschlecht des Mensch zurück
	public String getGender(){
		return "?";
	}
	
	public Human getPartner() { return partner; }
	public Human getFather() { return father; }
	public Human getMother() { return mother; }
	
	//Gibt eine Beschreibung diese Menschen aus
	public String toString(){
		String ret = name + " (" + getAge() + " Jahre, " + getGender() + ")";
		if (partner!=null)
			ret += "; verheiratet mit " + partner.getName();
			
		if (mother!=null) ret += "; Mutter " + mother.getName();
		if (father!=null) ret += "; Vater " + father.getName();
		return ret;
	}
	
	//Liefert einen zufälligen Wahrheitswert
	public static boolean randomBool(){
		return Math.random() < 0.5;
	}
}
 

gruenerblob

Mitglied
ah ok danke ich glaub des begreif ich etz. probier gleich mal rum. hoff ich kriegs dann endlich hin.
Vielen dank dir nochmal!!!
 

gruenerblob

Mitglied
naja meine versuche sind eher weniger von erfolg gekrönt. aber zumindest versteh ich etz n bissl was du meinst.
etz is eben nur noch des problem wie ich aus minerva und albert n male bzw female objekt mach wie du eben gesagt hast.
habs grad mit der methode:
Female female = (Female) minerva; probiert aber des wird so auch nix...
glaub ich hau mich in die falle hab die schnauze langsam voll.
nochmal vielen dank für deine mühe.
 

sliwalker

Top Contributor
Hi,

Du erstellt ein Objekt vom Typ Female genauso wie von Human:
Java:
Female female = new Female("Minerva", 21);

greetz
SLi
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Methoden überschreiben Java Basics - Anfänger-Themen 3
K Interface Methoden überschreiben Java Basics - Anfänger-Themen 1
G Frage zur Vererbung und überschreiben von Methoden Java Basics - Anfänger-Themen 6
W überschreiben von Methoden Java Basics - Anfänger-Themen 3
G Methoden überschreiben ? Java Basics - Anfänger-Themen 10
N Methoden überladen - überschreiben - wo unterschied? Java Basics - Anfänger-Themen 8
W Equals-Methode überschreiben bei composition Java Basics - Anfänger-Themen 20
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
T Printwriter Datei nicht überschreiben Java Basics - Anfänger-Themen 10
JensXF Methode überschreiben, so richtig? Java Basics - Anfänger-Themen 4
E Slider - Wert übergeben und überschreiben Java Basics - Anfänger-Themen 5
E Ausgabe überschreiben Java Basics - Anfänger-Themen 15
L 2 Dimensional Array werte überschreiben Java Basics - Anfänger-Themen 1
F Variablen Werte einer Klasse überschreiben Java Basics - Anfänger-Themen 4
Jinnai4 Clipboard überschreiben? Java Basics - Anfänger-Themen 11
J Methoden Equals Methode für Integer und Objekte überschreiben? Java Basics - Anfänger-Themen 9
D .txt überschreiben mit BufferedWriter ohne reset Java Basics - Anfänger-Themen 6
neerual Feld mit Einsen und Nullen füllen und überschreiben Java Basics - Anfänger-Themen 1
N awt: vererbte Methode überschreiben Java Basics - Anfänger-Themen 3
M Zeile in datei überschreiben Java Basics - Anfänger-Themen 5
V Elemente aus einem Array mit null überschreiben Java Basics - Anfänger-Themen 4
F Werte in 2D-Array mit anderem 2D-Array überschreiben Java Basics - Anfänger-Themen 2
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
K StringBuilder Objekt überschreiben - Speicherverbrauch Java Basics - Anfänger-Themen 3
J JTable Wert gleich überschreiben Java Basics - Anfänger-Themen 6
K compareTo(String arg) überschreiben Java Basics - Anfänger-Themen 4
M Warum soll man die Finanlize Methode nicht überschreiben und aufrufen? Java Basics - Anfänger-Themen 2
P Fehler bei überschreiben eines Eintrags Java Basics - Anfänger-Themen 2
B Werte eines Arrays überschreiben. Java Basics - Anfänger-Themen 3
L Eclipse Projekt überschreiben Java Basics - Anfänger-Themen 4
H Methoden "Leeren" Speicher auf der Festplatte überschreiben Java Basics - Anfänger-Themen 8
J Methode von Subklassen einzeln überschreiben Java Basics - Anfänger-Themen 12
R variable überschreiben schlägt fehl Java Basics - Anfänger-Themen 13
B To String Metode überschreiben? Java Basics - Anfänger-Themen 30
F Methode überschreiben Java Basics - Anfänger-Themen 9
X OOP Getter/Setter überschreiben den Wert ihrer Variablen nicht Java Basics - Anfänger-Themen 4
F Variablen String-Array wird ungewollt "überschreiben" Java Basics - Anfänger-Themen 7
A Eine Datei Lesen und bestimmte Position überschreiben Java Basics - Anfänger-Themen 2
M xml log4j überschreiben für/in Java Klassen Java Basics - Anfänger-Themen 4
D Methode überschreiben Java Basics - Anfänger-Themen 2
B Input/Output bestimmte Zeilen in .txt Dateinen überschreiben Java Basics - Anfänger-Themen 20
B JLabel löschen/überschreiben Java Basics - Anfänger-Themen 10
J Variablen überschreiben innerhalb einer Klasse Java Basics - Anfänger-Themen 7
B Wann toString() überschreiben? Java Basics - Anfänger-Themen 21
Z Kann actionPerformed(ActionEvent) nicht überschreiben Java Basics - Anfänger-Themen 8
4 sysout überschreiben Java Basics - Anfänger-Themen 2
M Equals überschreiben Java Basics - Anfänger-Themen 3
J Variablen überschreiben Java Basics - Anfänger-Themen 17
M Methode von einem Object überschreiben Java Basics - Anfänger-Themen 5
M OOP Methode überschreiben mit String-Paramter unterschiedlicher Größe? Java Basics - Anfänger-Themen 19
K equals() und hashcode() überschreiben Java Basics - Anfänger-Themen 5
E Zeile innerhalb Datei überschreiben Java Basics - Anfänger-Themen 2
S Methode einer kompilierten .jar überschreiben Java Basics - Anfänger-Themen 9
S hashCode() überschreiben Java Basics - Anfänger-Themen 13
c_sidi90 Excelfile bearbeiten ohne zu überschreiben? Java Basics - Anfänger-Themen 25
K Methode überschreiben - neuen Fehler Werfen? Java Basics - Anfänger-Themen 6
G Klasse überschreiben wenn Rückgabe über Methode Java Basics - Anfänger-Themen 6
A JFileChooser - ungefragtes überschreiben Java Basics - Anfänger-Themen 12
M .txt Datei überschreiben Java Basics - Anfänger-Themen 8
H jZable - Zelle direkt überschreiben Java Basics - Anfänger-Themen 3
F Verschachtelte Arrays kopieren und überschreiben Java Basics - Anfänger-Themen 4
I Variable überschreiben Java Basics - Anfänger-Themen 5
D toString überschreiben + Exception werfen Java Basics - Anfänger-Themen 3
neurox Tutorial equals und hashCode überschreiben Java Basics - Anfänger-Themen 33
calzone FileReader, lesen ohne die Datei zu überschreiben? Java Basics - Anfänger-Themen 3
S Welche Methode in JFrame überschreiben? Java Basics - Anfänger-Themen 12
B Klasse überschreiben Java Basics - Anfänger-Themen 15
E Konstante überschreiben Java Basics - Anfänger-Themen 6
K Attribute überschreiben! Java Basics - Anfänger-Themen 2
R Elemente einer .txt hinzufügen und nicht überschreiben Java Basics - Anfänger-Themen 10
Developer_X Durch int Bestimmte Zeile überschreiben Java Basics - Anfänger-Themen 16
S HashCode überschreiben! Java Basics - Anfänger-Themen 17
T Funktion von Interface überschreiben Java Basics - Anfänger-Themen 4
M main()-Konstruktor überschreiben / überladen Java Basics - Anfänger-Themen 6
C array in anderes kopieren ohne zu überschreiben . Java Basics - Anfänger-Themen 13
V Text in der Konsole "überschreiben" Java Basics - Anfänger-Themen 3
H Methode überschreiben Java Basics - Anfänger-Themen 5
M Zeile überschreiben Java Basics - Anfänger-Themen 2
H JTextPane überschreiben Java Basics - Anfänger-Themen 2
N Wann und wie oft finalize Methode verwenden( überschreiben ) Java Basics - Anfänger-Themen 6
G problem beim überschreiben einer funktion Java Basics - Anfänger-Themen 2
G JTextArea: Anlegen, Text löschen, überschreiben Java Basics - Anfänger-Themen 4
T Daten in einer Datei überschreiben Java Basics - Anfänger-Themen 13
M Methode mit abweichendem Rückgabetyp überschreiben Java Basics - Anfänger-Themen 9
G Dokument überschreiben Java Basics - Anfänger-Themen 19
J Werte eines XML Files überschreiben Java Basics - Anfänger-Themen 7
K Sortieren, überschreiben von Variablen? Java Basics - Anfänger-Themen 13
F Komandozeilen-Text überschreiben Java Basics - Anfänger-Themen 6
E einzelne Zeile mithilfe Steams aus Textdatei überschreiben Java Basics - Anfänger-Themen 23
D JTable Header überschreiben. Java Basics - Anfänger-Themen 5
G Wert nicht überschreiben Java Basics - Anfänger-Themen 7
S Wert in HashMap überschreiben Java Basics - Anfänger-Themen 7
R Config-Datei überschreiben. Java Basics - Anfänger-Themen 3
A Panel überschreiben Java Basics - Anfänger-Themen 4
A Monatsangaben überschreiben Java Basics - Anfänger-Themen 7
G Text übertragen, ohne alten zu überschreiben Java Basics - Anfänger-Themen 6
N Inhalt einer TextArea überschreiben Java Basics - Anfänger-Themen 4
M Konstanten ableiten und überschreiben Java Basics - Anfänger-Themen 2
A Datei überschreiben? Java Basics - Anfänger-Themen 4
emreiu Methoden Rekursive Methoden Runter- & Hochzählen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben