Dúvida de inicialização de classe e uso do super em método

Sou iniciante em java, passei a tarde toda procurando entender algumas coisa e não obtive sucesso na minha empreitada. Vamos a minha dúvida:

Eu tenho duas classes, exemplos utilizados no Deitel.
Classe DrawRainbow

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

public class DrawRainbow extends JPanel{
    final Color VIOLET = new Color(128,0,128);
    final Color INDIGO = new Color(75,0,130);

    private Color colors[] = {
 	Color.white, Color.white, VIOLET, INDIGO, Color.blue,
	Color.green, Color.yellow, Color.orange, Color.red
    };

    public DrawRainbow(){
	setBackground(Color.white);
    }

    public void paintComponent(Graphics g){
	super.paintComponent(g);

        int radius = 20;

	int centerX = getWidth()/2;
	int centerY = getHeight() - 10;
	
	for(int counter = colors.length; counter > 0; counter--){
	    g.setColor(colors[counter-1]);
	    g.fillArc(centerX - counter * radius,
		      centerY - counter * radius,
		      counter * radius * 2, counter * radius * 2,0,180);

 	}	
    }
    
}

Classe Teste

import javax.swing.JFrame;
import java.awt.Graphics;
public class Teste{

    public static void main(String []args){
	DrawRainbow rio = new DrawRainbow();
	JFrame frame = new JFrame("Desenho de um arco iris");
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.add(rio);
	frame.setSize(400,250);
	frame.setLocationRelativeTo(null);
	frame.setVisible(true);
    }
}

Minha dúvida é: Onde e como esse desenho está sendo inicializado, logicamente é pelo método paintComponent()… mas não entendi essa de um método paintComponent() ser inicializado se não o chamei. Eu só criei um objeto DrawRainbow() adicionei esse objeto ao frame… e só pelo que me lembre.
DrawRainbow rio = new DrawRainbow();

A classe construtora de DrawRainbow só tem:
setBackground(Color.white);
Minha dúvida: como está sendo inicializado esse método paintComponent?? Toda vez que eu crio um objeto, todos os métodos são inicializados?
Obrigado pela atenção.

Ele aparece quando o frame que foi criado o adiciona, e este (o frame) chama o método paintComponent.

frame.add(rio);

Muito obrigado pela explicação. vlw mesmo… mas sem querer ser abusado, me surgiu outra dúvida. é a última… prometo :smiley:

E como eu vou saber se uma classe irá utilizar um método de outra classe?
Na classe JFrame eu não encontro a especificação do método add(), só addImplem(). De paintComponent() eu só encontrei que é um método herdado de java.awt.Component.
Teria como saber se uma classe irá inicializar um método de outra classe? Ou fica tudo encapsulado(escondido)? Se tem o nome igual ele inicializa o método e sobrescreve o que tinha antes? é mais ou menos isso que acontece?