gpt4 book ai didi

java - 为什么在paintComponent方法中将Graphics引用分配给Graphics2D引用变量时没有运行时错误?

转载 作者:行者123 更新时间:2023-12-01 13:00:41 25 4
gpt4 key购买 nike

我知道下面的分配会出现运行时错误,并且我知道原因:

Sub sb = (Sub) new Super();

public class Super {
//class members
}



public class Sub extends Super{
//class members
}

但是当我们重写 javax.swng.JPanel 的 protected void PaintComponent(Graphics g) 方法时,为什么没有 RuntimeError (毕竟 Graphics2D extends Graphics ) :

Graphics2D g2d = (Graphics2D)g;

是因为 g 中已经有 Graphics2D 引用吗?

最佳答案

这不是一个错误,因为正如你所说,g实际上是一个由系统实例化的Graphics2D对象(保留在ming Graphics2DGraphics的子类)。

当你这样做时:

Sub sb = (Sub) new Super();

您正在明确创建父类(super class)的新对象。但是,当您这样做时:

Graphics2D g2d = (Graphics2D)g;

您不是在创建新的 Graphics2D 对象,而是转换已经是 Graphics2D 实例的现有对象。

在swing渲染的情况下,执行图形操作的对象是一个Graphics2D对象,但是paintComponent()接收一个Graphics对象为了向后兼容。

关于java - 为什么在paintComponent方法中将Graphics引用分配给Graphics2D引用变量时没有运行时错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23535526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com