Java 的 JPanel 子类中重写父类的 paint 方法 会被自动调用,请问调用的条件或时机

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 的 JPanel 子类中重写父类的 paint 方法 会被自动调用,请问调用的条件或时机相关的知识,希望对你有一定的参考价值。

Java 的 JPanel 子类中重写父类的 paint 方法 会被自动调用,请问调用的条件或时机是什么
百度提问有字数限制,原代码字数超了,所以截图,大家看看

参考技术A 组件被显示的时候调用
主动调用组件的repaint方法是被调用追问

自动调用的时机呢,我创建了一个JPanel对象,paint方法该在构造函数的执行完之后被调用,可是我的paint方法中有一个对象是在另一个方法action中创建的,而调用action的语句我是写在了创建JPanel对象之后的,运行是成功的,而且我用输出语句测试了下,是先调用了JPanel的构造方法,其次是action方法,最后才是paint方法

追答

构造函数在对象被创建的时候调用时一定的,但是paint函数是不一定会被调用的。

当你将JPanel的对象加入到顶层组件,顶层组件在显示自己的时候,会去调用它的子组件的paint方法来绘制,最终显示出来。

也就是说,JPanel如果没有被显示,是不会去调用paint方法。【另,窗口不会去显示被其他组件遮挡的JPanel】

因此,如果你是在组建显示之前调用的action,那么action就是比paint先执行。

追问

额,很有道理,不过悲催的是,我的action是在jframe的setvisible之后

追答

那就要看你的代码是怎么样了。

追问

额,现在手机上,明天再传

参考技术B JPanel实例化之后,就会开始绘制.

Java中子类重写父类的方法为啥返回值类型要小于等于父类方法的返回值类型?

个人观点:子类重写父类方法,假设子类和父类都有抛出异常的逻辑,假设父类抛出了IOException,而子类抛出了Exception(包含IOException),你可以想象一张小渔网怎么能网住一头鲸鱼,这就是子类抛出异常必须是父类异常的派生类的原因。
所以从返回上说,可以推出子类方法返回值类型不能大于父类方法,因为返回时抛出的异常必须能被父类捕获。
再补充一点:为什么重写还有一条规则是访问控制符必须高于父类?那是因为为了多态的实现。有时候父类需要上转型引用子类的方法实现多态,这就导致子类方法的访问控制符必须高于父类,否则子类里写成了private,父类还怎么访问?
同理,子类方法返回值类型小于父类,因为父类引用子类方法实现多态,你不能让一个返回空的方法的返回值经过一个不能返回空的方法出去。
参考技术A 方法覆盖的原则:
1:子类中的方法名必须跟父类中的相同,参数列表也必须相同
2:返回类型只有两种情况:
a:和父类相同
b:是父类中返回类型的子类
3:子类方法的访问权限,必须比父类方法的访问权限更大或者相同,但是必须注意如果父类访问权限是private,子类是继承不到的。所以不存在覆盖的概念

如果说返回值类型都不相同或者不是其返回类型的子类 那么就不能称之为方法的覆盖
参考技术B 首先你得明白继承的含义

字符类就是继承
继承之后有一个方法覆写的概念【非private】
覆写就是可以沿用父类的方法,但是沿用父类的该方法的返回值类型【这其实又涉及到了多态】

以上是关于Java 的 JPanel 子类中重写父类的 paint 方法 会被自动调用,请问调用的条件或时机的主要内容,如果未能解决你的问题,请参考以下文章

java子类重写父类带泛型的方法

Java中子类重写父类方法的思想本质!

java中子类重写父类方法的思想本质

java中方法的重写

如何在java中子类中父类的对象如何调用父类的方法?

Java子类访问父类的私有成员变量