1. Polymorphismus (Zuweisungen, Methodenaufrufe)

Submitted by javafrage on Sun, 09/08/2013 - 11:14

Die main() Methode der Klasse Punkt3D arbeitet mit Objekten der Klassen Punkt2D und Punkt3D.

public class Punkt2D {
   private double x;
   private double y;

   public Punkt2D(double xx, double yy) {
      x = xx;
      y = yy;
   }
   /**
   * Diese Methode erzeugt eine Zeichenkette der x
   * und y Koordinate
   * @return Zeichenketten mit Belegung 
   */
   public String drucken() {
      String s = "x:"+ x + " y: " +y;
      return s;
   }
}// Ende der Klase Punkt2D

public class Punkt3D extends Punkt2D{
   private double z;

   public Punkt3D(double xx, double yy, double zz) {
      super(xx,yy);
      z = zz;
   }

   /**
   * Diese Methode erzeugt eine Zeichenkette der x,y und Z
   * Koordinate
   * @return Zeichenketten mit Belegung
   */
   public String drucken() {
      String s = super.drucken() + "z:" +z;
      return s;
   }

   public static void main(String[] args) {
Punkt2D[] feld= new Punkt2D[2];
feld[0] = new Punkt2D(11.1,22.2);
feld[1] = new Punkt3D(11.1,22.2,33.3); Punkt2D p2d0 = feld[0]; Punkt2D p2d1 = feld[1]; // Analyse der Druckenmethode System.out.println(p2d0.drucken()); // Was wird ausgegeben? System.out.println(p2d1.drucken()); // Was wird ausgegeben? // Typkonversionen. Punkt3D p3da = p2d0; Punkt3D p3db = p2d1; Punkt3D p3dc = p3db; Punkt2D p2d3 = p3db; } }// Ende Klasse Punkt3D
  1. Was schreibt dieses Programm mit den beiden Aufrufen von System.out.println() auf die Konsole? (2 Minuten)
  2. Warum werden hier zwei unterschiedliche Methoden aufgerufen, obwohl der Variablentyp bei beiden Variablen Punkt2D ist? Nennen Sie den Fachbegriff und erklären Sie ihn kurz. (4 Minuten)
  3. Analysieren Sie die Zuweisungen nach dem Kommentar „Typkonversionen“ in der Methode main()
    • Fügen Sie Typkonversionen an den Stellen ein, an der die Zuweisungen nicht
      sicher sind und vom Übersetzer javac als Syntaxfehler beanstandet werden. (2 Minuten)
    • Obwohl alle Zuweisungen mit den entsprechenden Typkonversionen syntaktisch richtig sind wird es zur Ausführungszeit Fehler geben. Kommentieren Sie diese Zeilen mit „//“ aus. (1 Minute)
    • Eine der Zuweisungen hat eine sichere Typkonversion die ohne explizite Typkonversion (cast) erlaubt ist. Markieren Sie diese Zeile mit „sichere Typkonversion“ (1 Minute)

Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)

Niveau 1
Schwierigkeitsgrad mittel
Zeit 2+4+4 Minuten

Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)

Antwort zu Frage 1 : Implementieren einer abgeleiteten Klasse

1. Was schreibt dieses Programm mit den beiden Aufrufen von System.out.println() auf die Konsole?

  • x:11.1 y: 22.2
  • x:11.1 y: 22.2 z:33.3

2. Warum werden hier zwei unterschiedliche Methoden aufgerufen, obwohl der  Variablentyp bei beiden Variablen Punkt2D ist? Nennen Sie den Fachbegriff und erklären Sie ihn kurz:

  • Die Methode drucken der Klasse Punkt3D überschreibt die Methode der Oberklasse. Durch den Polymorphismus in Java wird die Methode automatisch die speziellste für das gegebene Objekt ausgewählt.

3. Quellcode mit eingefügten Antworten:

public class Punkt2D {
   private double x;
   private double y;

   public Punkt2D(double xx, double yy) {
      x = xx;
      y = yy;
   }
   /**
   * Diese Methode erzeugt eine Zeichenkette der x
   * und y Koordinate
   * @return Zeichenketten mit Belegung 
   */
   public String drucken() {
      String s = "x:"+ x + " y: " +y;
      return s;
   }
}// Ende der Klase Punkt2D

public class Punkt3D extends Punkt2D{
   private double z;

   public Punkt3D(double xx, double yy, double zz) {
      super(xx,yy);
      z = zz;
   }

   /**
   * Diese Methode erzeugt eine Zeichenkette der x,y und Z
   * Koordinate
   * @return Zeichenketten mit Belegung
   */
   public String drucken() {
      String s = super.drucken() + "z:" +z;
      return s;
   }

   public static void main(String[] args) {
      Punkt2D[] feld= new Punkt2D[2];
      feld[0] = new Punkt2D(11.1,22.2);
      feld[1] = new Punkt3D(11.1,22.2,33.3);
 
      Punkt2D p2d0 = feld[0];
      Punkt2D p2d1 = feld[1];
      // Analyse der Druckenmethode
      System.out.println(p2d0.drucken()); // Was wird ausgegeben?
      System.out.println(p2d1.drucken()); // Was wird ausgegeben?
 
      // Typkonversionen.
      //In der nächsten Zeile wurde ein Kommentar eingefügt
      //Punkt3D p3da = (Punkt3D) p2d0;
      Punkt3D p3db = (Punkt3D) p2d1;
      Punkt3D p3dc = p3db; // Sichere Zuweisung
      Punkt2D p2d3 = p3db; // Upcast -> Sichere Zuweisung
   }
}// Ende Klasse Punkt3D

Anonymous (not verified)

Thu, 04/08/2021 - 13:33

Hallo!
Der Lösungssatz für Aufgabe 2 hat einen Merkwürdigen Satzbau, was meinen sie mit diesem Satz?
Dank für ihre Antwort