如果我有一个抽象的Parent类,它有一个templateMethod和一个具体的Child类:
abstract class Parent
{
final void templateMethod()
{
foo();
}
abstract void foo();
}
class Child extends Parent
{
@Override
void foo()
{
System.out.println("foo");
}
}如果我只想让用户知道templateMethod,而不想将foo方法暴露给Child类的用户,而让Child类定义foo方法的实现,该怎么办呢?或者,模板方法在这种情况下不合适吗?那么,有没有其他我可以使用的策略?
发布于 2019-12-07 00:37:00
正如JB Nizet在评论中所建议的,您可以这样做:
abstract class Parent {
final void templateMethod() {
foo();
}
abstract protected void foo();
}
class Child extends Parent {
@Override
protected void foo() {
System.out.println("foo");
}
}由于Parent.foo()为protected,因此只有Parent的子类可以调用该方法。
你可能也会发现这个问题很有帮助:What is the difference between public, protected, package-private and private in Java?
https://stackoverflow.com/questions/59134369
复制相似问题