Polymorphie

  • Themenstarter Themenstarter Polidoli
  • Beginndatum Beginndatum
P

Polidoli

Gast
Hi,

hab nen kleines Verständnisproblem zur Polymorphie. Ich hab hier mal nen Pseudeocode gemacht (ist hoffentlich nicht zu lang) wo ich jetzt erwarten würde, dass die addiere() Funktion meiner abgeleiteten Klasse aufgerufen werden müsste. In meinem konkreten Programm wird jedoch immer die Basisklasse aufgerufen, was muss ich machen damit ich mit den Objekten der Basisklasse arbeiten kann, obwohl sich darin Objekt von abgeleiteten klassen befinden?

Java:
class Basis {

     int a;
     int b;
     Basis(int a, int b) {this.a=a;this.b=b;}

     public int addiere() {return a+b;}

}

class Erweitert extends Basis {

     int c;
     
     Erweitert(int a, int b, int c) {
        super(a, b);
        this.c = c;
     }
     public int addiere() {return super.addiere()+c;} //diese soll aufgeufen werden
}

class ContainerKlasse {

     Basis [] array=null;   

      ContainerKlasse(){
         Basis [] array = new Basis[10];
      }

     public void add(Basis b) {...} //Füge basis objekte ins array ein

     public int addiereAlle() {       //Addiere alles auf
           int r=0;
           for each {
              r += array[].addiere(); //eig. sollte hier addiere() von "Erweitert" aufgerufen werden, wirds aber leider nicht
           }
           return r;
     }
}

class MeineMain() {

  public void int main() {
       Erweitert a(1,2,3); 
       Erweitert b(4,5,6);
      
       ContainerKlasse ck = new ContainerKlasse();
       ck.add(a); ck.add(b);
       ck.addiereAlle();
  }
}
 
Zuletzt bearbeitet von einem Moderator:
Du kannst nur auf die Methoden der Basis-Klasse zugreifen, weil Du auch nur ein Objekt der Basis-Klasse erstellst. Du musst nur ein Objekt der Erweitert-Klasse erstellen und schon kannst Du auch auf die Methoden dieser Klasse zugreifen, also so:
Java:
class ContainerKlasse {
 
     Erweitert [] array=null;   
 
      ContainerKlasse(){
         Erweitert [] array = new Erweitert[10];
      }

Grüße,
muemmel_0811
 
@muemmel: addiere() ist eine Methode der Basisklasse, die in "Erweitert" überschrieben wird. Das müsste so eigentlich funktionieren.
@TS: Mach doch mal ein lauffähiges Beispiel und probiere es aus.
 
in der main-Methode werden doch Erweitert-Objekte erstellt, sofern man das bei diesem bruchstückhaften Code überhaupt sagen kann,
das Array darf ruhig vom Typ Basis sein (@muemmel_0811)

ich habe den Code bei mir lauffähig erweitert, und selbstverständlich wird die Methode von Erweitert ausgeführt,
kein Problem zu erkennen, aber bei so unvollständigen Code sieht es bei dir vielleicht ganz anders aus
 
Java:
Erweitert a(1,2,3); 
Erweitert b(4,5,6);

funktioniert das überhaupt? es wird doch kein Object erzeugt. Fehlt da nicht das new?
 

Neue Themen


Zurück
Oben