内部类的问题

时间:2021-11-07 19:29:19
现在有类A,类B,接口C, 抽象类 E 

其中A extends B implements C 

由于程序需要 ,需要让A extends E,但现在在类B和接口C,抽象类E 都已经无没变更改,无法在扩展

为了达到这种效果,我在A类中创建一个内部类D,让D extends E,(相当于多继承),然后在D中访问A的方法、具体实现,在由A

来构造D的实例,来调用D的方法

这样设计有没有什么不妥,有什么坏处?

8 个解决方案

#1


应该没什么问题吧,只不过逻辑比较复杂而已

#2


实际上很多复杂类就是这么做的。
在awt中就很多。

#3


不妥就是这个类A过于复杂了,最好将抽象类E变为接口,A implements C,E
不过你说E已经无法更改成接口了,那么只能做一些补救措施了,即将内部类声明为static
这样在A中就不用先构造D的实例来访问D的方法了

#4


最好尝试重新设计一下层次结构了

#5


这样做没有什么不妥啊,不过看起来会比较繁杂,别人可能会很难看懂啊

#6


to duo_clb :
请教依你的意见这个应该如何设计呢?

magic256:内部类声明为static 这样在A中就不用先构造D的实例来访问D的方法了,如果这样,这个静态内部类就不能访问外部数据了,我也想过,呵呵,不过还是谢谢你!

#7


在我看来在面向对象的设计中,一切皆是对象,在这里,内部类是不是也可以看成一个单独的对象,只是比较“特殊”,比如他支持继承...,(这里是把内部独立出来看)他具有一切对象对具备的特性,这样看内,这样设计应该是可行的,我不想把这个内独立出来,因为我认为这没有意义,这个内部类除了A类会用他以外,不会在有任何地方会访问他,基于上面的思路,我才这么做,才会有上面的问题!

#8


问题是没有问题
但是这是一种很不好的设计
因为你的层层嵌套,造成了N多的耦合
不涉及修改时没什么问题,但是一旦需要修改代码的话,势必需要同时修改多个代码段

#1


应该没什么问题吧,只不过逻辑比较复杂而已

#2


实际上很多复杂类就是这么做的。
在awt中就很多。

#3


不妥就是这个类A过于复杂了,最好将抽象类E变为接口,A implements C,E
不过你说E已经无法更改成接口了,那么只能做一些补救措施了,即将内部类声明为static
这样在A中就不用先构造D的实例来访问D的方法了

#4


最好尝试重新设计一下层次结构了

#5


这样做没有什么不妥啊,不过看起来会比较繁杂,别人可能会很难看懂啊

#6


to duo_clb :
请教依你的意见这个应该如何设计呢?

magic256:内部类声明为static 这样在A中就不用先构造D的实例来访问D的方法了,如果这样,这个静态内部类就不能访问外部数据了,我也想过,呵呵,不过还是谢谢你!

#7


在我看来在面向对象的设计中,一切皆是对象,在这里,内部类是不是也可以看成一个单独的对象,只是比较“特殊”,比如他支持继承...,(这里是把内部独立出来看)他具有一切对象对具备的特性,这样看内,这样设计应该是可行的,我不想把这个内独立出来,因为我认为这没有意义,这个内部类除了A类会用他以外,不会在有任何地方会访问他,基于上面的思路,我才这么做,才会有上面的问题!

#8


问题是没有问题
但是这是一种很不好的设计
因为你的层层嵌套,造成了N多的耦合
不涉及修改时没什么问题,但是一旦需要修改代码的话,势必需要同时修改多个代码段