Benutzer-Werkzeuge

Webseiten-Werkzeuge


polymorphismus:abstractclasses

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
polymorphismus:abstractclasses [2023/03/10 10:59] Martin Pabstpolymorphismus:abstractclasses [2023/03/12 19:34] (aktuell) – [Beispiel 2: Raumschiff mit verschiedenen Kanonen] Martin Pabst
Zeile 5: Zeile 5:
 {{ :polymorphismus:pasted:20230310-115633.png }} {{ :polymorphismus:pasted:20230310-115633.png }}
 **Merke:** \\  **Merke:** \\ 
-  * Wird eine Methode in einer Klasse nur **deklariert**, aber nicht **implementiert**, so heißt sie **abstrakte Methode**. +  * Wird eine Methode in einer Klasse nur **deklariert**, aber nicht **implementiert**, so nennt man sie **abstrakte Methode**. 
   * Eine Klasse, die mindestens eine abstrakte Methode besitzt, heißt **abstrakte Klasse**.   * Eine Klasse, die mindestens eine abstrakte Methode besitzt, heißt **abstrakte Klasse**.
-  * Von einer abstrakten Klasse kann man keine Objekte instanzieren.+  * Von einer abstrakten Klasse kann man keine Objekte instanzieren, wohl aber von Unterklassen, bei denen alle abstrakten Methoden implementiert sind.
   * Der Compiler stellt sicher, dass jede nicht-abstrakte Unterklasse einer abstrakten Klasse für alle abstrakten Methoden eine Implementierung besitzt.   * Der Compiler stellt sicher, dass jede nicht-abstrakte Unterklasse einer abstrakten Klasse für alle abstrakten Methoden eine Implementierung besitzt.
 </WRAP> </WRAP>
Zeile 13: Zeile 13:
 <HTML> <HTML>
  
-<div class="java-online" style="height: 50vh; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'polymorphismus4'}">+<div class="java-online" style="height: 50vh; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'polymorphismus5'}">
  
 <script type="text/plain" title="Test1.java"> <script type="text/plain" title="Test1.java">
Zeile 70: Zeile 70:
  
 </HTML> </HTML>
 +
 +===== Beispiel 2: Raumschiff mit verschiedenen Kanonen =====
 +<WRAP center round info 100%>
 +{{ :polymorphismus:pasted:20230310-120603.png }}
 +</WRAP>
 +
 +
 +<HTML>
 +
 +<div class="java-online" style="height: 50vh; width: 100%" data-java-online="{'withBottomPanel': true, 'id': 'polymorphismus6'}">
 +
 +<script type="text/plain" title="Spaceship.java">
 +Spaceship s = new Spaceship();
 +s.useGun(new TripleGun());
 +
 +class Spaceship extends Sprite {
 +   
 +   Gun gun;
 +   int lastTimeFired = 0;
 +   
 +   Spaceship() {
 +      super(50, 300, SpriteLibrary.Space_Shooter_1, 0);
 +      gun = new SimpleGun();
 +   }
 +   
 +   void useGun(Gun gun) {
 +      this.gun = gun;
 +   }
 +
 +   public void act() {
 +      if(isKeyDown(Key.ArrowUp)) {
 +         move(0, -8);
 +      }
 +      if(isKeyDown(Key.ArrowDown)) {
 +         move(0, 8);
 +      }
 +
 +      if(isKeyDown(" ") && System.currentTimeMillis() - lastTimeFired > 300) {
 +         lastTimeFired = System.currentTimeMillis();
 +         gun.fire(getCenterX() + 15, getCenterY()); 
 +      }
 +      
 +   }
 +}
 +</script>
 +
 +<script type="text/plain" title="Gun.java">
 +abstract class Gun {
 +   
 +   abstract void fire(double x, double y);
 +
 +}
 +
 +class SimpleGun extends Gun {
 +   
 +  public void fire(double x, double y) {
 +      new Projectile(x, y, 15, 0);
 +  }
 +
 +}
 +
 +class TripleGun extends Gun {
 +   public void fire(double x, double y) {
 +      new Projectile(x, y, 15, 0);
 +      new Projectile(x, y, 10, -4);
 +      new Projectile(x, y, 10, 4);  
 +   }
 +}
 +
 +class Projectile extends Sprite {
 +   double vx, vy;
 +   Projectile(double x, double y, double vx, double vy) {
 +      super(x, y, SpriteLibrary.Space_Shooter_1, 5); 
 +      this.vx = vx;
 +      this.vy = vy;
 +   }
 +
 +   public void act() {
 +      move(vx, vy);
 +      if(isOutsideView()) {
 +         destroy();
 +      }
 +   }
 +}
 +</script>
 +
 +</div>
 +
 +
 +</HTML>
 +
 +
 +<WRAP center round todo 80%>
 +**Aufgabe: ** \\ \\ 
 +Erfinde eine andere Art von Kanone, schreibe eine entsprechende Klasse und probiere sie im obigen Programm aus.
 +</WRAP>
 +
polymorphismus/abstractclasses.1678445974.txt.gz · Zuletzt geändert: 2023/03/10 10:59 von Martin Pabst

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki