Java 为什么在图形类抽象中使用drawPolygon方法,我仍然可以使用它

Java 为什么在图形类抽象中使用drawPolygon方法,我仍然可以使用它,java,swing,Java,Swing,在中,有一个摘要方法定义为 public abstract void drawPolygon(int[] xPoints, int[] yPoints, int nPoints) 为什么我仍然能够在代码中直接使用该方法 编辑: 在官方java文档中,Graphics的唯一直接已知子类是Graphics2D,它没有实现该方法,也没有任何直接已知子类 是的,您仍然可以使用它,因为您实际上没有在代码中使用抽象类图形。您的应用程序将使用一个具体的Graphics子类,该子类被传递给paintCompo

在中,有一个摘要方法定义为

public abstract void drawPolygon(int[] xPoints, int[] yPoints, int nPoints)
为什么我仍然能够在代码中直接使用该方法

编辑:
在官方java文档中,
Graphics
的唯一直接已知子类是
Graphics2D
,它没有实现该方法,也没有任何直接已知子类

是的,您仍然可以使用它,因为您实际上没有在代码中使用抽象类图形。您的应用程序将使用一个具体的Graphics子类,该子类被传递给
paintComponent(Graphics)
等方法。这个具体的子类将实现
drawPolygon(int[],int[],int)


这篇关于Swing绘画的文章可能有助于提供关于这些方法如何工作的更多细节。这篇文章也很有用。

不,我使用的是
g.drawPolygon(xPoints,yPoints,numPoints)直接在我定义的
paintComponent(Graphics g)
方法中。@23hush-对,但框架创建了图形实例并将其传递给了应用程序。不是你创造的。如果执行
System.out.println(g.getClass().getName())输出什么?@23hush:仔细阅读@我给了你正确的答案。您可能需要了解多态性和继承。@eugener,@Justkt:我发现传递给该方法的对象的类是
SunGraphics2D
,这在正式的java api文档中没有提到。我认为这可能是一个特定于平台的问题,如果我使用另一个JavaVM,可能会有所不同。我说得对吗?