我有两个课程:Student
和User
。 User
类扩展Student
,并且它们都实现了一个公共接口,该接口定义了checkSelf()
方法。此方法检查对象的状态是否有效,并在数据库中执行更新或插入之前调用。
我在数据库中插入了学生和用户,这使得在两种情况下都可以从课外调用此方法。这就是this post中找到的解决方案似乎不适用于我的问题的原因。也许我错过了一些东西。
基本上,现在的方式,两个checkSelf()
方法都是公共的,User
类中的方法在进行自己的检查之前从其父(Student
)调用一个方法。
我怎么能解决这个问题,所以我有干净的代码?
答案 0 :(得分:4)
我个人并不同意这条规则(恕我直言,比使用更令人头疼),但你提到的问题的答案给出了一个相当好的指示,表明你能做些什么。
checkSelf()
方法最终checkSelfEx()
中创建一个空的受保护Student
方法,该方法被称为checkSelf()
的最后一步checkSelfEx()
使其成为最终版。 这保证了在调用方法时始终执行checkSelf()
中执行的检查(因此不可能通过子类中断合同)。当然问题在于命名,就好像你想在User的子类中有更多逻辑一样,你需要checkSelfExEx()
。如果所有这些检查都可以用更好的名称进行分组,那么至少可以阅读,但是将很多最终方法暴露给子类并不是一件好事。