我有一个类结构,我希望基类中的某些方法可以从直接从基类派生的类访问,但不能派生自派生类。根据Java语言规范,可以覆盖继承方法的访问规范,使它们更公开,但不是更私密。例如,这是我需要做的要点,但是非法:是否可以在Java中隐藏或降低对继承方法的访问?
// Defines myMethod
public class Base {
protected void myMethod() {}
}
// Uses myMethod and then hides it.
public class DerivedOne extends Base {
@Override
private void myMethod();
}
// can't access myMethod.
public class DerivedTwo extends DerivedOne {
}
有什么办法可以做到这一点吗?
编辑解释为什么我想这样做:
在这种情况下,类结构是数据处理和进口结构。它读入并分析充满表格数据的文本文件,然后将它们存储在数据库中。
基类是管理数据库处理部分的基表类。其中包含相当数量的功能,这对所有表类型都很常见 - 因为一旦它们在数据库中,它们就会变得统一。
中间类是特定于正在解析的文件中的表的类型,并具有表解析和导入逻辑。它需要访问一些基类的数据库访问函数。
顶级类是特定于表的,只不过是以父类可以理解的方式初始化表的布局。此外,基类的用户不需要查看或访问中间类所具有的数据库特定功能。实质上,我想把这些函数只展现在基类之上的一层,而不是其他人。
我问,因为虽然我作为例子发布的代码是非法的,但可能还有其他一些手段来完成相同的目的。我问是否有。
也许隐藏是一种错误的方式来描述这个 - 我真正需要做的是将一些应该是基类私有的功能公开到层次结构中上一级的类中。隐藏会做到这一点 - 但我可以看到隐藏是一个问题。有没有另一种方法来做到这一点?
由于DerivedOne是一个基地,它必须容纳基地的合同。顺便说一下,这就是为什么委托(复合模式)通常比继承更受欢迎的原因。 – 2009-12-14 18:03:31
@Steve我不相信复合模式可以在这里工作。从本质上讲,我只需要将一些对基类应该是私有的功能展示给一个级别的类。 – 2009-12-14 18:33:39
更新了我的答案。 – rsp 2009-12-14 19:56:27