如何从基类继承,但在派生类中将基类的一些公共方法设为私有?

时间:2019-01-16 18:05:19

标签: java

例如,Base类有两个公共方法:foo()和bar()。派生类继承自Base类(我不能修改该类,因为它在我使用的库中)。

在派生类中(在我的应用程序中),我想将foo()公开,但将bar()私有。以下代码是正确的自然方法吗?我没有扩展它,而是创建一个对象并仅访问所需的方法。

    class Base {
       public void foo();
       public void bar();
    };

    public class Derived {
         private Base base;

         public void bar() {
            base.bar();
         }
    };

2 个答案:

答案 0 :(得分:1)

您不能降低从其继承的方法的可见性

因此,如果超级方法是公共方法,则不能简化为受保护或私有方法

这个问题已经解决了:Cannot reduce visibility of method inherited method from parent

答案 1 :(得分:0)

您不能从类继承并降低所继承方法的可见性。另一方面,您所显示的代码没有利用继承。如果您需要扩展一个类(以便从基类继承所有状态和行为),但又不想将所有继承的方法公开为公共方法,则可以使用以下方法:

public final class Derived {

    private final Base base = new Base() { // extending base class here

        @Override
        public void foo() {
            Derived.this.foo();
        }

        @Override
        public void bar() {
            Derived.this.bar();
        }
    };

    public void foo() {
        // Implement foo here
    }

    private void bar() {
        // Implement bar here
    }
}

因此,我们的想法是将扩展Base的类的实现封装在新的private final类的Derived字段中,该类仅公开foo方法,而保持bar方法private。该匿名内部类仅委托Derived类的方法。作为一项额外的安全措施,我们还将制作Derivedfinal