Zastosowanie metody super()

0

Cześć, mam nietypową prośbę, a mianowicie może mi ktoś tak po ludzku wytłumaczyć dlaczego w kawałku programu zamieszczonym poniżej jest konieczna metoda super() ? i dlaczego bez niej nie działa rysowanie i ogólnie błędy występują.
Pytam bo to co znalazłem na sieci nie dało mi satysfakcjonującej odpwiedzi na to pytanie

public class Test extends JApplet
{
   public void init()             
   {                              
      setContentPane(new Pole()); 
   }                              
}
class Pole extends JPanel implements MouseMotionListener
{
   Belka b=new Belka(100);
   Kulka a=new Kulka(this,100,100,1,1);
   
   Pole()                           
   {                                
      super();                      
      addMouseMotionListener(this); 
      new SilnikKulki(a);           
   }                                
   
   public void paintComponent(Graphics g)                                                      
   {                                                                                           
      super.paintComponent(g);                                                                 
      Graphics2D g2d=(Graphics2D)g;                                                            
      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); 
                                                                                               
      g2d.fill(a);                                                                             
      g2d.fill(b);                                                                             
   }                                                                                           
   
   public void mouseMoved(MouseEvent e) 
   {                                    
      b.setX(e.getX()-50);              
      repaint();                        
   }                                    
   
   public void mouseDragged(MouseEvent e) 
   {                                      
                                          
   }                                      
}
0

super() to wywołanie konstruktora klasy z której dziedziczymy. W konstruktorze nadklasy mogą być ustawiane różne rzeczy bez których rysowanie nie działa.

0

Mozna dodac ze w tym przypadku wywolanie super() wcale nie jest potrzebne (wlasciwie to nigdy nie jest) poniewaz kompilator sam dosaje takie wywolanie. Trzeba samemu wywolywac konstruktor klasy bazowej jesil jest ich kilka, i chcemy wywolac ktorys z konkretnymi parametrami.

0

@Koziołek i @trelemele, chyba odpowiadacie nie na temat. Autorowi pytania chodzi zapewne o to

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

hmm.. z poczatku zastanawialo mnie to super() umieszczone w konstruktorze.. po odpowiedz tremele zauwazylem ze tamto super wcale nie jest wymagane, wiec moja idea na super.paintComponent zostala zachwiana i teraz bym chcial tak jak bogdans pisze odpowiedź dlaczego ono tutaj jest ?

Troche zamotałem teraz, sorki

0

Fragment dokumentacji metody paintComponent():

Further, if you do not invoker super's implementation you must honor the opaque property, that is if this component is opaque, you must completely fill in the background in a non-opaque color. If you do not honor the opaque property you will likely see visual artifacts.

1 użytkowników online, w tym zalogowanych: 0, gości: 1