问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java 中 Graphics2D g2=(Graphics2D)g这句我怎么理解不了

发布网友 发布时间:2022-04-23 00:11

我来回答

3个回答

热心网友 时间:2023-06-23 23:36

public void paintComponent(Graphics g)没有实例化!只是一个局部引用变量g,他的类型是 Graphics (父类的)
Graphics2D g2=(Graphics2d)g;应该是Graphics2D g2=(Graphics2D)g;
不要小看大小写!
这句话是这样执行的!
Graphics2D g2;创建Graphics2D 的引用!
能不能转换
1、检查 转换之间是否具有继承关系!
由于Graphics Graphics2D 具有继承关系,这一步通过!

2、Graphics2D 和(Graphics2D )是不是一样的类型!
肯定再次通过!
到这里就可以编译通过

3、检查 Graphics g 是否被实例化(这里是抽象类当然不能)
假如这里不是抽象的,如果父类被父类的构造器实例化,那么
运行出现异常!如果是被子类的构造器实例化的,那么执行也正确!
4、并不是你说的“继承中向下转型应该不能转吧”
关键是看它指向的是什么!

可以理解子类拥有的永远要大于或等于父类的,这样说明白不?
不懂再问!

建议你看《Java编程思想》也就是《Think in java》搜索下,PDF、CHM格式的很多!

补充:

理解一下引用类型!就像C 语言中的结构体一样!
VLabel a=(VLabel)new JLabel();//已经分配了空间!
可以分解成这样!
j=new JLabel();//
VLabel a=(VLabel)j;
实质上可以理解 j a 就是2个指针,(结构体指针)指针也有类型,比如int ……
你现在是去放大 指针j指向的内存单元~~我们怎么去分配新增加的内存单元?我们拿什么去添充新增加的内存单元?
Graphics2D g2=(Graphics2D)g
而这样只是在放大结构体!就像在结构体里面加一条
char c;一样的~

抱歉、我也不知道这样理解对不~~~反正这个东西搞昏了我好多次了~!
多看书、多找资料!

热心网友 时间:2023-06-23 23:37

我也不懂了
主要在于这个:public void paintComponent(Graphics g)
Graphics是一个抽象类,不可能直接产生实例,但传入的参数必须是一个实例。这里的g事实上不属于Graphics类,而是其某个子类的一个实例。这个子类就是sun.java2d.SunGraphics2D,代码中看不出来,是通过JVM传入的,具体过程我也不是很清楚。
可以在程序中加入代码:System.out.println(g.getClass().getName());便可以看到g具体是哪个类对象的实例。如果需要了解绘图过程,则只能参考SunGraphics2D的代码.

参考资料:ovix

热心网友 时间:2023-06-23 23:37

Graphics2D g2=(Graphics2D)g是正确的呀~
这里的g是方法中的参数(即Graphics g),而楼主也知道,Graphics2D是Graphics的子类,所以这是上到下的类型转换,所以要强行转换~~
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? JAVA环境变量设置不成功, JAVA_HOME G:\jdk-7u7 形容小女孩的声音很好听德词语 java中:System.out.println("String".replace('g','G')=="String".replace('g','G')); 为什么返回false java 最后拼接字符串g和str怎么实现不了?应该怎么改? 求助:Java安装出现问题 java系统占用内存4.7G算高吗? JAVA运行的时候经常出现内存不足怎么回事啊 我的是四G内存 执行Java程序是出错。。截图如图,环境变量已经改成G:\Java\bin 为什么还会出现如图的错误? java中g.fillArc(x,y, d, d,180,180)什么意思 有人知道这个java g.drawImage哪里出错了吗 vsco未兼容安卓9怎么办? 梦到天上有一只非常美丽的鸟? 梦见一种颜色绚丽很漂亮的大鸟是什么意思?求解 梦见草滩上都是花,天上还飞着羽毛各种颜色特别漂亮的鸟,我想拍照但是发现没有手机? 梦到一只非常漂亮的鸟,而且会说人话? 梦见美丽的鸟和猫会发生什么? 梦见漂亮的鲜花,还拍照呢!谁会解梦? 我昨天晚上梦见一只漂亮的小鸟,是什么意思啊? 做梦梦到漂亮的鸟.是什么 梦见 鸟 和 花 怎么把word文字外面的框去掉? 安装了一个java7结果C盘多了3个G文件,要怎么清理掉,卸载java7也没有用... word文本里文字都带方框怎么去除 java 任意给定一个包含多个"g"长字符串,将其中的"g"替换为"中国" 用word时怎么把边框去掉 java中包的问题: 环境变量:.;%java_home%\lib;G:\a;%java_home%\lib\tools.jar; 在G盘下的路径中有两个 电脑安装JAVA总是提示磁盘空间不足,空间明明还有50多个G word怎么去掉边框 高手来解决下JAVA问题~ 求高手:java的环境变量设置……急…… 在word中,文件排版时如何去掉边框 word文字边框怎么去掉 怎么去掉word里的文字外的框框 word文档中下面的框框怎么去掉啊? 怎么去掉word边框? 手机版word文字边框怎么去掉 请问,在WORD中将文字竖排了后出现一个边框,这个边框如何消除?谢谢 在word文本框里怎么把边框去掉,有几种方法 发芽的土豆中含有什么毒素? 发芽的土豆中含有一种毒素,如果摄入过多,可因呼吸麻痹而导致死亡。这...