Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich verstehe es nicht. Wie soll ich sowas realisieren:
Klasse1->instantiiert Klasse2->instantiiert Klasse3
Klasse3 kennt Methoden von->Klasse2 kennt Methoden von->Klasse1
wenn ich "Klasse2 extends Klasse1" mache, kommt ein Speicherüberlauf. Das ist auch logisch: die rufen sich gegenseitig in einer endlosschleife auf bis speicher voll ist und der compiler abbricht.
wenn ich es aber nicht mache, kennt Klasse2 die Methoden von Klasse1 nicht.
wenn die methoden in klasse 1 protected sind oder public kannst du sie mit super.<methodenname> bzw super() für konstruktor aus klasse 2 aufrufen, oder gar nur mittels <methodenname>, je nach umfeld des Aufrufs , da brauchst du keine objekte rumreichen oder sonst was.
zeig doch mal den Teil:
die rufen sich gegenseitig in einer endlosschleife auf bis speicher voll ist
irgendwie sehe ich die Methoden von super nicht. Beispiel:
Code:
public class Klasse1 {
public int eigenschaft1=1;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new Klasse1();
}
public Klasse1(){
new Klasse2();
}
public int getEigenschaft1(){
return eigenschaft1;
}
}
Code:
public class Klasse2{
int eigenschaft2=2;
public Klasse2(){
new Klasse3();
}
public int getEigenschaft2(){
return eigenschaft2;
}
}
Code:
public class Klasse3 {
public Klasse3(){
System.out.println(getEigenschaft2()); // fehler: methode nicht definiert
System.out.println(super.getEigenschaft2()); // fehler: methode nicht definiert
}
}
wenn ich es hinkriege, auf methoden von super zuzugreifen, wie sieht es mit super von super aus? Also getEigenschaft1 aus Klasse1 un der Klasse3. Wenn ich es richtig verstanden habe: wenn ich in der "Klasse99" auf methoden von "Klasse1" zugreifen will, muss ich 99 mal die Methode in jeder Klasse neu schreiben? 99 mal? Das kann nicht sein. Irgendwas verstehe ich anscheinend grundsätzlich falsch.
ja, das ist ja das problem. wenn ich in der Klasse2
Code:
new Klasse3();
mache und in der Klasse 3
Code:
public class Klasse3 extends Klasse2{
mache, bekomme ich Speicherüberlauf:
Exception in thread "main" java.lang.StackOverflowError
at Klasse2.<init>(Klasse2.java:7)
at Klasse3.<init>(Klasse3.java:4)
at Klasse2.<init>(Klasse2.java:8)
at Klasse3.<init>(Klasse3.java:4)
at Klasse2.<init>(Klasse2.java:8)
at Klasse3.<init>(Klasse3.java:4)
at Klasse2.<init>(Klasse2.java:8)
at Klasse3.<init>(Klasse3.java:4)
at Klasse2.<init>(Klasse2.java:8)
..................
public class Klasse1 {
public int eigenschaft1=1;
static Klasse2 klasse2=new Klasse2();
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new Klasse1();
}
public Klasse1(){
}
public int getEigenschaft1(){
return eigenschaft1;
}
}
Code:
public class Klasse2 extends Klasse1{
int eigenschaft2=2;
static Klasse3 klasse3 =new Klasse3();
public Klasse2(){
}
public int getEigenschaft2(){
return eigenschaft2;
}
}
Code:
public class Klasse3 extends Klasse2{
public Klasse3(){
System.out.println(getEigenschaft2());
System.out.println(getEigenschaft1());
System.out.println();
}
}
bringt es für mich irgendwelche nachteile wenn ich klassen als static instantiiere?
Beispiel: wenn ich ein programm schreibe, habe ich einen JFrame, wo fenstertitel gesetzt werden kann. einige klassen später habe ich einen JFileChooser, der titel von JFrame ändern soll(dateiname im titel).
Ich habe die Lösung. Das Problem war anscheinend, dass ich kein richtig gläubiger Mensch bin. Aber die bei SUN anscheinend schon
Nach Darvin's theorie in Java-Sprache:
Eltern instantiieren mich und ich erbe von Eltern. Ich instantiiere meine Kinder und die erben von mir:
Code:
public class MeineEltern {
private int elterneigenschaft=1;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new MeineEltern();
}
public MeineEltern(){
new Ich();
}
public int getElterneigenschaft(){
return elterneigenschaft;
}
}
Code:
public class Ich extends MeineEltern{
private int meineeigenschaft=2;
public Ich(){
new MeineKinder();
}
public int getMeineEigenschaft(){
return meineeigenschaft;
}
}
Code:
public class MeineKinder extends Ich{
public MeineKinder(){
System.out.println(this.getElterneigenschaft());
System.out.println(this.getMeineEigenschaft());
}
}
DAS GEHT NICHT:
Exception in thread "main" java.lang.StackOverflowError
ABER, wenn wir Gott mit ins Spiel nehmen, dann:
Gott erzeugt meine Eltern, mich und meine Kinder.
Ich erbe von Eltern, meine Kinder von mir:
Code:
public class Gott {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new Gott();
}
public Gott(){
new MeineEltern();
new Ich();
new MeineKinder();
}
}
Code:
public class MeineEltern {
private int elterneigenschaft=1;
public int getElternEigenschaft(){
return elterneigenschaft;
}
}
Code:
public class Ich extends MeineEltern{
private int meineeigenschaft=2;
public int getMeineEigenschaft(){
return meineeigenschaft;
}
}
Code:
public class MeineKinder extends Ich{
public MeineKinder(){
System.out.println(this.getElternEigenschaft());
System.out.println(this.getMeineEigenschaft());
}
}
DAS GEHT!
Tja... ich sollte vielleicht mal die Kirche besuchen
meine idee mit gott und so war wohl nicht so gut. mein "gott" instantiiert alles, "Eltern" haben aber keine instanz von mir und meinen Kindern. Tja, dumme sache. muss weitersuchen