最近、私はグラフィックスを使ってJavaの仕事をしようとしています。これで、Graphicsクラスは抽象になります。つまり、それ自体はインスタンス化できませんが、そのサブクラスはインスタンス化できる可能性があります。したがって、次のコードで何が起こっているのでしょうか。(それは正常に線を作成します)
import javax.swing.*;
import java.awt.*;
public class line 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 line());
jf.setSize(500, 500);
jf.setVisible(true);
}
}
さて、今、いくつかのことが私には意味がありません。まず、lineが呼び出されると、lineクラスでpaintComponentメソッドを実行する必要があります。これは静的メソッドのプロパティです(クラス名で呼び出されます)。ただし、paintComponentメソッドには静的修飾子がありません。
このプログラムは機能するので、paintComponentが呼び出され、引数としてGraphicsオブジェクトを期待していると想定する必要があります。引数がないのに呼び出されたとき。なぜこれでエラーが発生しないのですか?Stringを渡してから、Integerオブジェクトを期待していたメソッドに何も渡さずにいくつかのテストを実行しました。両方のプログラムでエラーが発生しました。
したがって、どういうわけか、gというグラフィックスオブジェクトが作成され、はdrawlineメソッドを使用します。しかし、グラフィックスは抽象的です。
さて、ここに私の質問があります:
paintComponentが静的でないときにクラス行が呼び出されると、paintComponentが自動的に呼び出されるのはなぜですか?
Graphicsオブジェクトが必要なのにpaintComponentが空の引数を受け入れるのはなぜですか?
Graphicsクラスは抽象的でインスタンス化できないため、Graphicsオブジェクトgはどのように作成されますか?
StackOverflowを手伝ってください。あなたが私の唯一の希望です。
編集:さて、私はこの質問がかなりよく答えられていると思います、ありがとう!