免责声明....我是Java和OOP的新手。
我有一个包含四个子类的超类。对于每个子类,我需要解析XML文件。每个XML中大约40%-50%的元素彼此相同,而另一半元素对于每个子类都不同。
我最初的方法是在超类中包含SAX解析器处理程序代码,并简单地将所有可能的XML元素列入其中。但后来我遇到了将特定于子类的其他50%-60%元素传递回子类的问题。由于超类不了解每个子类(我认为),我认为如果我以某种方式将数据强制到子类,我会违反OOP原则。
所以现在我想我可能需要设置四个不同的SAX解析器,每个子类中有一个。超类仍将用于常见实例变量和其他方法。但我也会将一些SAX解析器代码重复四次。
关于如何继续并遵守OOP原则的任何建议?
答案 0 :(得分:1)
对于这种复杂程度,我建议使用另一种方法将XML映射到对象层。查看JAXB - 它为这些类型的映射提供了一个非常健壮的框架,并自动处理对象继承。
答案 1 :(得分:0)
根据我的理解,你有4个SAXParser
s(或者是DefaultHandlers
?无论......)共享父母。
父母应该能够保持4个孩子之间“共享”的状态。在继承方面,孩子们肯定能够知道他们的父母有哪些方法和属性。事实上,他们是的他们的父母。他们需要知道他们继承了什么,这就是为什么你必须import A
如果你定义B extends A
。违反OOP原则的是当一个对象在聚合关系中引用其容器时 - 这是向后的。
因此,在父级中定义公共回调处理程序例程,并覆盖必须处理额外标记的子级中的处理程序。只需确保拨打super()
,并考虑建立共同状态protected
。