'mystring' gibt es in Klasse 1 nicht. Erben sollte man auf keinen Fall, um Code zu sparen.Warum willst du von der Klasse1 auf Klasse2 zugreifen?
Grundsätzlich greifen keine Klassen auf andere zu, sondern nur die Instanzen von Klassen.
Warum willst du ein Objekt der Klasse1 erstellen wenn das Objekt der Klasse2 alles von 1 erbt?
Klasse2 erbt doch alles von Klasse1 und hat somit auch das Attribut mystring.
Mit dem erben will man nur Code sparen.
Ihr meint sicher beide Objektorientierung. Und da ist Wiederverwendbarkeit der eine wichtige Punkt und Kapselung ein anderer. Und vielleicht gibt es noch ein paar mehrwenn nicht die Code Einsparung (Wiederverwendbarkeit)
Ich glaube das ist aber nicht das Primäre. Die ist-Beziehung ergibt sich ja erst dadurch das du Vererbung hast. Ohne Vererbung ist diese Sichtweise obsolet.wenn auch wirklich eine ist-Beziehung existiert
Und auch das wird ja ein Nebeneffekt der Codeeinsparung !an erster Stelle sollten Wiederverwendbarkeit und Wartbarkeit stehen
Ich glaube, das ist der springende Punkt. Bei einem schlechten Entwurf schafft man in manchen Fällen künstlich eine "ist ein"-Beziehung, weil es intuitiv nahe liegt, obwohl es für den Fall vielleicht der fasche Weg ist. Vererbung ist zunächst bequem und verleitet zum übertriebenen Einsatz.Die ist-Beziehung ergibt sich ja erst dadurch das du Vererbung hast.
Ich glaube das ist aber nicht das Primäre. Die ist-Beziehung ergibt sich ja erst dadurch das du Vererbung hast. Ohne Vererbung ist diese Sichtweise obsolet.
Und auch das wird ja ein Nebeneffekt der Codeeinsparung !
Aber welches Konzept liegt denn dahinter wenn ich mir für Objekte vom Typ LKW, Sportwagen, Limousine, Bagger, Panzer überlege dass die ja Gemeinsamkeiten haben die ich in einer Klasse Fahrzeug zusammenfasse ? Das Konzept ist doch sich zu ersparen die Teile die gemeinsam sind in jeder Klasse wieder neu zu implementieren, also diese nur einmal an einer Stelle zu haben, also Codeersparnis. Und die Effekte die sich dadurch einstellen nennt man Wiederverwendbarkeit, Kapselung, verbesserte Wartbarkeit usw.liegt ja irgendwie Konzept dahinter, welches die Beziehung vorgibt
Ja klar. Aber es geht ja nicht darum ein Problem mit möglichst wenig Code zu lösen sondern darum ein Problem nur einmal zu lösen und dadurch Code einzusparen !Aber nur Code einsparen wollen führt nicht unbedingt zu besserem Code
Wie kann ich nun auf das Attribut mystring mit Klasse1 zugreifen?
public class Klasse1 {
public String getMyString() {
return ( this instanceof Klasse2 ) ? ((Klasse2)this).mystring : "";
}
}
Ja so geht es zwar technisch aber Klasse 1 kennt ja Klasse 2 nicht ! Sollte sie jedenfalls nicht. Und das ist das angesprochene Designproblem.schweres Designproblem
Aber welches Konzept liegt denn dahinter wenn ich mir für Objekte vom Typ LKW, Sportwagen, Limousine, Bagger, Panzer überlege dass die ja Gemeinsamkeiten haben die ich in einer Klasse Fahrzeug zusammenfasse ? Das Konzept ist doch sich zu ersparen die Teile die gemeinsam sind in jeder Klasse wieder neu zu implementieren, also diese nur einmal an einer Stelle zu haben, also Codeersparnis. Und die Effekte die sich dadurch einstellen nennt man Wiederverwendbarkeit, Kapselung, verbesserte Wartbarkeit usw.
Um die gleiche Problematik geht es auch in deinem anderen Thread
http://www.java-forum.org/thema/kla...wert-zugreifen-koennen-klasse-3-nicht.172668/
package firma.chefetage;
public class Chef {
String naechsterTermin = "Test";
public String getTermin() {
return this.naechsterTermin;
}
void setTermin(String t) {
this.naechsterTermin = t;
}
void setBudget(int b) {
}
}
package firma.chefetage;
public class ChefSekretaerin extends Chef {
}
package firma.mitarbeiteretage;
import firma.chefetage.*;
public class Mitarbeiter extends Chef {
int budget = 100;
public int getBudget() {
return this.budget;
}
}
Dort war ja das Problem, dass naechsterTermin nur von Mitarbeiter gelesen werden kann und von Chef und Chefsekretaer geschrieben werden kann.
Hier haben wir das Problem, dass budget nur von Mitarbeitern gelesen werden kann und von Chef und Chefsekretaer geschrieben werden kann.
Der einzige Unterschied ist doch bloß, dass die Variablen anders heißen. Ansonsten ist es exakt das gleiche Problem