2014-10-07 18 views
5

Dato il seguente codice:Capire come funziona drawLine

import javax.swing.*; 
import java.awt.*; 

public class NewClass extends JPanel { 
    public void paintComponent(Graphics g) { 
     g.drawLine(0, 0, 90, 90); 
    } 

    public static void main(String[] args) { 
     JFrame jf = new JFrame(); 
     jf.add(new NewClass()); 
     jf.setSize(500, 500); 
     jf.setVisible(true); 
    } 
} 

Perché è tracciare una linea se il metodo drawLine è astratto e, come sono riuscito a capire, un metodo astratto non ha una definizione?

Grazie in anticipo!

+0

Il suo ploymorphism. Alcuni sottoclassi che implementano tale metodo verranno passati. –

+0

non dovresti chiamare 'super.paintComponent (g);' nel metodo 'paintComponent (Graphics g)'? Mi stavo solo chiedendo. – EpicPandaForce

risposta

3

paintComponent() ottiene una sottoclasse non astratta di Graphics, che implementa drawLine(). Deve ottenere una sottoclasse non astratta, poiché una classe astratta non può essere istanziata.

+4

E il codice di implementazione effettivo sarà specifico per piattaforma, e grazie alla magia di OOPS e al polimorfismo, possiamo facilmente usarlo senza doverne conoscere la struttura interna. 1+ –

2
public void paintComponent(Graphics g) 

Qui grafica è metodo astratto drawLine che non dispone di un corpo realizzato, ma le sue sottoclassi hanno implementazioni concrete per drawLine. Quando viene chiamato paintComponent, viene passato l'oggetto della sottoclasse non astratta appropriata di Graphics.