Skip to Content

1.67 Programmablauf

Gegeben sei das folgende Programm:

public class Main2 {
   static short k;
    
   public static void main(String[] args) {
     short i, k;
     short imax = 10;
     for (i = 1; i < imax; i++) {
       for (k = 1; k < imax; k++) {
           if ((k == i) || (k == (imax - i))) {
              System.out.print("*");
                } 
            else { System.out.print(" "); // ein Leerzeichen 
                 }
       } // for k
       switch (i) {
          case 1:
          case 2:
          case 3:
          case 4:
              System.out.println("LINKS");
              break;
          case 6:
          case 7:
          case 8:
          case 9:
              System.out.println("RECHTS");
              break;
          default:
              System.out.println("MITTE");
       } // switch
     } // for i
    } // main
}
  • Markieren Sie alle Schlüsselwörter
  • Arbeiten Sie jetzt das Programm ab und tragen Sie die Konsolenausgaben von oben nach unten auf ein (kariertes) Blatt Papier ein.

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

Niveau 1
Schwierigkeitsgrad mittel
Zeit 8+3 Minuten

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

Antwort zu Frage 1.66: 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

Comments

Typkonversion

Ist es gewollt, dass in der Antwort zu 1.66 bei der letzten Typkonversion weder ein Downcast, noch "//sichere Typkonversion" steht?

Typkonversion

Dies würde mich auch einmal interessieren!

Na denn...

Das ist ein sicherer Upcast.



blog | by Dr. Radut