我如何使用图形 - 抽象 class

How can I use Graphics - an abstract class

我想知道 java.awt.Graphics 是如何工作的,所以我通过 NetBeans 找到了源代码。我注意到 Graphics 是一个抽象 class 并且我使用的所有函数都是抽象方法。

这让我想到,如何使用图形?

我的意思是,Graphics 是抽象的 class,我在 JPanel 中使用 Graphics 对象。它是如何工作的?如何在不使用实现图形的 class 的情况下将其作为抽象 class 使用?

您不能直接使用抽象的实例 class。 Graphics等抽象class类无法实例化;只有具体的 subclasses 可以(图形有两个,DebugGraphics 和 Graphics2D)。在 JPanel 的情况下,您在 paintComponent() 中获得的 Graphics 参数实际上是 Graphics2D 的一个实例(您可以通过强制转换来检查它)。 Graphics2D class 提供Graphics中抽象方法的实现。

Graphics2D 也是一个抽象class。我的理解是,它是 Graphics2D 的具体子 class 的对象。我们不需要知道那个 class... 的名称,只需知道它实现了其抽象 parent/grandparent classes 的抽象方法:Graphics2D 和 Graphics。 例如,传递给 paintComponent 的 Graphics2D g 对象不是 Graphics2D 类型的对象,除非在继承上下文中:g 是类型 ??? 的对象。它扩展了 Graphics2D,因此它是类型为 ??? 的对象,它是一个 Graphics2D,它是一个图形。 我不是专家,但我是这样理解的。