Newsgroup: it.comp.java
Titolo: Metodi astratti

Ho trovato l'esempio riportato sotto sul libro "Java in a Nutshell" vorrei
sapere come e' stato possibile richiamare il metodo astratto drawImage
senza averlo mai implementato.
Grazie e ciao. Marco Altieri
// This example is from the book _Java in a Nutshell_ by David Flanagan.
// Written by David Flanagan.  Copyright (c) 1996 O'Reilly & Associates.
// You may study, use, modify, and distribute this example for any purpose.
// This example is provided WITHOUT WARRANTY either expressed or implied.
/**
 * This applet displays an animation.  It doesn't handle errors while
 * loading images.  It doesn't wait for all images to be loaded before
 * starting the animation.  These problems will be addressed later.
 **/
import java.applet.*;
import java.awt.*;
import java.net.*;
import java.util.*;
public class Animator extends Applet implements Runnable {
    protected Image[] images;
     protected int current_image;
    // Read the basename and num_images parameters.
    // Then read in the images, using the specified base name.
    // For example, if basename is images/anim, read images/anim0, 
    // images/anim1, etc.  These are relative to the current document URL.
    public void init() {
        String basename = this.getParameter("basename");
        int num_images;
        try { num_images =
Integer.parseInt(this.getParameter("num_images")); }
        catch (NumberFormatException e) { num_images = 0; }
 
        images = new Image[num_images];
        for(int i = 0; i < num_images; i++) {
            images[i] = this.getImage(this.getDocumentBase(), basename +
i);
        }
    }
    // This is the thread that runs the animation, and the methods
    // that start it and stop it.
    private Thread animator_thread = null;
    public void start() {
        if (animator_thread == null) {
            animator_thread = new Thread(this);
            animator_thread.start();
        }
    }
    public void stop() {
        if ((animator_thread != null) && animator_thread.isAlive()) 
            animator_thread.stop();
        // We do this so the garbage collector can reclaim the Thread
object.
        // Otherwise it might sit around in the Web browser for a long
time.
        animator_thread = null;
    }
 
    // This is the body of the thread--the method that does the animation.
    public void run() {
        while(true) {
            if (++current_image >= images.length) current_image = 0;
            this.getGraphics().drawImage(images[current_image], 0, 0,
this);
            this.getToolkit().sync();  // Force it to be drawn *now*.
            try { Thread.sleep(200); } catch (InterruptedException e) { ; }
        }
    }
}

 this.getGraphics().drawImage(images[current_image], 0, 0, this);
- E' corretto il fatto che drawImage() e' un metodo 'abstract' della classe
Graphics:
cio' significa che Graphics e' una classe 'abstract' e quindi, se tu vuoi
realizzare una tua classe derivata da Graphics, devi necessariamente
definire tutte i metodi 'abstract' tra cui drawImage().
- Non e' corretto invece affermare che drawImage() non e' mai stato
implementato:
quando utilizzi il drawImage() di un oggetto Graphics fornito dal metodo
getGraphics() di un qualsiasi Component, tu stai usando un'istanza fornita
dal sistema in cui drawImage() e' implementato.
Ciao
-- 
   o     Leonardo Boselli    
bos...@ivg.it
  o o    TETRACTYS Software  
tetr...@geocities.com
 o o o 
o o o o  
http://www.geocities.com/SiliconValley/Lakes/3015/

 dal sistema in cui drawImage() e' implementato.
Grazie per la risposta, pero' adesso ho le idee piu' confuse di prima.
Infatti non so piu' di quali metodi e' necessario fare una implementazione.
Vorrei, quindi, farti una domanda per vedere se comincio a capirci
qualcosa. E' vero che in uscita oppure come parametro passato ho sempre un
oggetto (e cioe' una istanza di una classe non astratta)? E' vero cioe' che
per sapere che, ad esempio, getGraphics da' in uscita un oggetto di una
sottoclasse della classe Graphics (che implementa il metodo drawImage()),
bastava pensare che non poteva essere niente di diverso proprio perche'
Graphics e' una classe astratta.
Infine vorrei chiederti se puoi consigliarmi un libro (anche in inglese)
per studiare le nuove caratteristiche di Java. (Il mio libro e' su Java
1.0).
Grazie e ciao. Marco Altieri
P.S. Molto bella la tua Home Page. Non ho avuto tempo per scaricare tutte
le Applet che hai realizzato ma certamente lo faro'.