如果我有一个抽象的console.log
类,其中有一个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
方法的实现?
还是在这种情况下不适合使用模板方法?然后,我还能使用其他策略吗?
答案 0 :(得分:0)
如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?