最近我正在考虑制作自己的日期库.我在这里发现了一个问题,这里是:
如何在子类中隐藏超类方法?所以它不会在子类中被检测到.
示例:我有一个扩展到Date的类,以及一个扩展到上一个类的另一个类.在我的新子类中,它检测来自Date的所有方法,比如getDate等.我想要的是,在我的子类中,来自Date的所有方法都未被检测到,没有抛出异常,但完全未被发现.
提前致谢 :)
Rav*_*yal 29
在这里赞成组合而不是继承.
而不是继承Date将其作为MyDate类中的成员字段.
public class MyDate {
private Date dt = new Date();
// no getDate() available
public long getTime() {
return date.getTime();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以完全控制子类可见的Date API(无需抛出任何异常),但是当您要隐藏的方法数量超出您希望保持可访问的方法时,此方法更实用.
如果扩展,则无法隐藏它,但您可以覆盖.
如果您希望您的API用户不使用该方法,我建议覆盖并抛出此异常:
UnsupportedOperationException
Run Code Online (Sandbox Code Playgroud)
但是看看你写的是什么,你应该考虑将Date作为你班上的一个字段,而不是扩展课程.
您可以使用委派代替
public class NewDate{
Date d;
NewDate(){
d = new Date();
}
methodsYouWantToChange(){
// new implementation
}
methodsYouDontWantToChange(){
d.methodsYouDontWantToChange();
}
newMethods(){
// new implementation
}
}
Run Code Online (Sandbox Code Playgroud)