限制子类访问父类方法

时间:2014-08-11 12:26:41

标签: java oop interface protected

假设我有一个接口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的实例。有没有解决方法?

希望接口支持另一个访问修饰符来处理此类情况。

2 个答案:

答案 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 { }

由于Afinal修饰符应用于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
  }
}