最近我正在考虑制作自己的日期库。我在这里发现了一个问题,这里是:
如何在子类中隐藏超类方法?所以它不会在子类中被检测到。
示例:我有一个延伸到 Date 的类,还有一个延伸到前一个类的类。在我的新子类中,它检测到来自 Date 的所有方法,例如 getDate 等。我想要的是在我的子类中,未检测到来自 Date 的所有方法,没有抛出异常,而是完全没有检测到。
提前致谢 :)
最近我正在考虑制作自己的日期库。我在这里发现了一个问题,这里是:
如何在子类中隐藏超类方法?所以它不会在子类中被检测到。
示例:我有一个延伸到 Date 的类,还有一个延伸到前一个类的类。在我的新子类中,它检测到来自 Date 的所有方法,例如 getDate 等。我想要的是在我的子类中,未检测到来自 Date 的所有方法,没有抛出异常,而是完全没有检测到。
提前致谢 :)
在这里优先考虑组合而不是继承。
而不是继承Date将其作为MyDate类中的成员字段。
public class MyDate {
private Date dt = new Date();
// no getDate() available
public long getTime() {
return date.getTime();
}
}
您可以完全控制对子类可见的 Date API(无需抛出任何异常),但是当您想要隐藏的方法数量超过您想要保持可访问性的方法时,这种方法更实用。
如果它被扩展,你不能隐藏它,但你可以覆盖它。
如果您希望您的 API 用户不使用我建议覆盖的方法并抛出此异常:
UnsupportedOperationException
但是看看你写的内容,你应该考虑让 Date 成为你类中的一个字段,而不是扩展类。
不可能。
如果你想要的东西是可能的,那么内在就会被打破。突然,当你使用某种 IS-A 类型时Date
,你将无法调用任何Date
类型的方法。这在几个层面上都是错误的。例如,它打破了里氏替换原则。
您可以改用委托
public class NewDate{
Date d;
NewDate(){
d = new Date();
}
methodsYouWantToChange(){
// new implementation
}
methodsYouDontWantToChange(){
d.methodsYouDontWantToChange();
}
newMethods(){
// new implementation
}
}
覆盖方法并使其成为静态,它会隐藏超类的方法