我有一个2个派生类使用的函数,但第三个没有,将它留在基类中是否有意义,即使3个派生类中的一个不使用它?
我能想到不允许第三类的唯一方法是基本上创建一个派生自基类的中间类,然后使用公共函数的2从第二类派生出来。
是否可以阻止第3类使用该功能,同时让两个应该使用它的功能使用它?
这只是似乎过分了,我的意思是只要我不“尝试”从第3课调用该函数,它应该不是问题,我只是感兴趣,如果有办法在没有太多麻烦的情况下一起防止它们。
答案 0 :(得分:3)
没有办法直接这样做。基本上,当你进行子类化时,你会说子类是基类的更具体的版本。
在这种情况下,您试图说“子类是基类的更具体版本,except for the fact that it shouldn't be able to touch XXX
”。实质上,这违反了Liskov Substitution Principle。
处理此问题的最佳方法是在层次结构中添加第二个基类,我相信您提到的解决方案。
基本上,建立你的层次结构:
base
| \---- subclass without feature available
|
\--base+feature
\--subclass one with specific feature
\--subclass two with specific feature
答案 1 :(得分:0)
您可以将此功能设为虚拟。然后覆盖第3类中的函数并抛出异常。它将阻止开发人员使用第3类中的函数。