我如何使用图形 - 抽象 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,它是一个图形。
我不是专家,但我是这样理解的。
我想知道 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,它是一个图形。 我不是专家,但我是这样理解的。