如何在Java中使用super?

时间:2019-05-16 06:41:32

标签: java super

您能帮我如何在Java中使用超级(super.paintComponent(g);)关键字。

我们可以在Java的paintComponent方法中使用超级关键字吗?如果我们在main方法中使用super怎么办。甚至有可能吗?

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 个答案:

答案 0 :(得分:6)

这里:

> super.paintComponent(g);

在您的DrawRainbow实例上,您正在调用paintComponent()的“原始”实现,该实现是从DrawRainbow的超类继承而来的。

换句话说:当您面对需要

  • @Override一种超类方法
  • 但有时会调用该“原始”实现

然后您就这样使用super。

注意:主要方法是静态。静态方法不会被继承,因此进行super.main()(或任何其他静态方法)毫无意义。 确切地说:您不能覆盖静态方法,如果有的话,您只能“遮盖”它们。

相反,如果您想这样做,可以说MySuperClass.main()

答案 1 :(得分:0)

super通常用于调用父构造函数,但基本上它仅代表父类,并且可用于访问父类的成员