假设我有一个接口I和A和B类。
interface I
{
method();
}
class A implements I
{
method()
{ //Implementation 1
}
}
class B extends A
{
method()
{ //Implementation 2
}
}
我想限制B访问'方法'。对b.method()的调用应始终使用a.method()而不是b.method实现,其中a和b分别是A和B的实例。有没有解决方法?
希望接口支持另一个访问修饰符来处理此类情况。
答案 0 :(得分:6)
正如stealthjong在评论中提到的那样,您可以通过A
实施method()
final
来实现这一目标:
interface I {
public void method();
}
class A implements I {
public final void method() {
System.out.println("Hello World!");
}
}
class B extends A { }
由于A
将final
修饰符应用于method()
的实现,因此B
无法重新定义它,而是始终调用它从{{1}继承的版本}}
如果我要写:
A
我会看到输出B instance = new B();
instance.method();
。
答案 1 :(得分:0)
您可以像这样实施B:
class B extends A
{
method()
{
method(true);
}
method(boolean callSuper)
{
if (callSuper)
{
super.method();
} else {
method_impl();
}
method_impl()
{
//Implementation method of B class
}
}