Как использовать супер в Java? - PullRequest
4 голосов
/ 16 мая 2019

Можете ли вы помочь мне, как использовать ключевое слово super (super.paintComponent(g);) в Java.

Можем ли мы использовать ключевое слово super в методе paintComponent в Java? Что делать, если мы используем супер в основном методе. Это вообще возможно?

File Drawrainbow.java
package com.company;

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

public class DrawRainbow extends JPanel {
    // define indigo and violet
    private final static Color VIOLET = new Color(128,0,128);
    private final static Color INDIGO = new Color(75,0,130);

    //colors to use in the rainbow, starting from innermost
    // the two white entries result in an empty arc in the center

    private Color[] colors ={Color.WHITE, Color.WHITE, VIOLET,INDIGO,Color.BLUE,Color.GREEN,Color.YELLOW,Color.ORANGE,Color.RED};

    //constructor
    public DrawRainbow(){
        setBackground(Color.WHITE); // set the background to while
    }

    // draws a rainbow using concentric arcs
    public void paintComponent(Graphics g){
        super.paintComponent(g);

        int radius = 20; // radius of an arc

        // draw the rainbow near the bottom-center
        int centerX = getWidth()/2;
        int centerY = getHeight() - 10;

        // draws filled arcs starting with the outermost
        for (int counter = colors.length; counter > 0; counter--){
            // set the color for the current arc
            g.setColor(colors[counter-1]);

            //fill the arc from 0  to 180 degrees
            g.fillArc(centerX-counter*radius,
                    centerY-counter*radius,
                    counter*radius*2,counter*radius*2,0,180);
        }
    }
}

File Test.java


package com.company;

import javax.swing.*;

public class Main {

    public static void main(String[] args) {
    // write your code here

        DrawRainbow panel = new DrawRainbow();
        JFrame application = new JFrame();

        application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        application.add(panel);
        application.setSize(400,250);
        application.setVisible(true);
    }
}

Ответы [ 2 ]

6 голосов
/ 16 мая 2019

Здесь:

> super.paintComponent(g);

В вашем экземпляре DrawRainbow вы вызываете «оригинальную» реализацию paintComponent(), унаследованную от суперкласса DrawRainbow.

Другими словами: когда вы сталкиваетесь с необходимостью

  • @Override метод суперкласса
  • , но иногда вызываете эту "оригинальную" реализацию

тогда вы используете супер, как это.

Примечание: основной метод - static .Статические методы не наследуются, поэтому нет смысла делать super.main() (или для любого другого статического метода).И если быть точным: вы не можете переопределить статические методы, если вообще можете только "затенять" их.

Вместо этого, если вы захотите это сделать, вы можете сказать,MySuperClass.main() например.

0 голосов
/ 16 мая 2019

super в основном используется для вызова родительского конструктора, но в основном он просто представляет родительский класс и может использоваться для доступа к членам родительского класса

...