java多个子类自动调用父类不包含的函数
来源:互联网 发布:震楼神器 淘宝 编辑:程序博客网 时间:2024/06/05 17:34
问题描述
在用javafx做毕设的时候需要对形状添加上下文菜单。为了代码的封装性,我选择了新定义一个MyContextMenu继承ContextMenu。在解决在Shape这种非Controller添加ContexMenu的问题后发现,虽然我能将之前的形状对象传过来,但是我只能用两个形状的公共父类也就是作为我自己的类的初始化参数。在我的代码中的实际情况就是:我的自定义原型MyCircle和自定义MyEllipse是分别继承Circle和Ellipse的,而他们的公共父类是Shape,这里我的ContextMenu里面选用的参数为Shape的父接口Node。
这样就有一个问题,就是我无法将Node强制转换为MyCircle或者MyEllipse,所以也就无法调用他们虽然都有的方法。比如Shape里没有delete方法,我在各自的类里边都是写了delete方法的。
简化问题
其实仔细一想,把这个问题抽象化,就能够更好得看清这个问题的本质。
有一个X父类,A、B继承X,这是已有的无法修改的类。然后现在我要写一个MA, MB,分别继承A和B。可以画图为
然后我们需要在另外的类里面调用X,A,B中没有的,MA和MB内却有的方法。
解决方法一
第一时间就能想到的解决方案,就是检查传过来的参数是否是MA,是否是MB等等等。。。。这个很简单,但是,事实上我有许多的形状,这个方法就显得有些笨,就得写一堆其实一模一样的没什么用的代码,通篇的instanceof。而且,虽然不是一个优秀的程序员,但是,总得有优秀的梦想,这种代码,看着都让人难受想想也是下下策。于是思考其他的方法。
解决方法二
其实因为想到了方法一,想到了instanceof,就突然想到直接新建一个接口Y。MA,MB实现接口Y。然后在外部调用时instanceof Y, 然后将参数X强制转换成Y,调用Y.delete()。突然发现问题就这么神奇的解决。惊叹自己前面是那么得蠢。
代码示例:(这里只写一个调用处的代码)
public class C { public C(X x) { if (x instanceof Y) { ((Y)x).delete(); } }}
总结
解决问题后,往前看,发现这其实是一个很简单的java接口的应用,但是一开始并没有能够想到,自己思考以后觉得可能还是没有能够把问题给抽象出来,所以一时间没有能够联想到这个方法。吃一堑,长一智,毕设已经快接近尾声了,希望毕业以后能够尽量避免这种低级的问题吧。
- java多个子类自动调用父类不包含的函数
- 基类中包含子类的构造函数......
- C++和JAVA中一些区别,包括指向子类的引用会调用谁的方法,子类构造函数自动调用父类构造函数时,父构造会调用的谁方法
- java类继承中父类调用子类函数的问题
- java 子类对象的实例化 调用构造函数先后
- java中子类的调用
- 利用接口类实现对多个实现子类的初始化,并调用子类中的方法
- Java继承中调用子类构造函数
- Java子类调用父类函数实验
- 子类会自动调用父类的无参构造函数
- PHP 子类是否会自动调用父类的构造函数
- 子类会自动调用父类的无参构造函数
- 子类会自动调用父类的无参构造函数
- 父类中调用子类构造函数实例化子类的实现
- 父类中调用子类构造函数实例化子类的实现
- 父类中调用子类构造函数实例化子类的实现
- php子类是否自动调用父类构造函数
- java中子类继承父类自动调用父类无参构造方法的问题
- ajax成功后返回上一页
- LSM树存储模型
- 线程和进程的区别
- mysql的5.6版本支持分区吗?
- Failed to load resource: the server responded with a status of 400 (Bad Request)
- java多个子类自动调用父类不包含的函数
- uva1356 Bridge
- Android 使用系统签名打包apk
- [web]xss攻击及如何防御
- JavaScript入门基础--数据类型
- pycharm打开html文件及在HTML文件中加载图片的问题
- 【剑指offer】旋转数组的最小数字
- 优化UITableViewCell高度计算的那些事
- 远程调用过程JSON数据过大,连接超时