Java,无法降低从对象继承的方法的可见性

2022-09-03 17:15:07

从这个问题继续:为什么不能降低方法在Java子类中的可见性?

我需要创建与类几乎相同的类,除了不能做某些可以做的事情。BABA

作为一个懒惰的程序员,我试图继承,只是为了迎接错误,这不能降低方法的可见性。嘟嘟!..ABA

现在是来自供应商的API,我的目的是封装这个API,以便它更易于使用。A

我想知道解决这个问题的最佳实践是什么?


答案 1

两个选项:

如果需要保留相同的接口(以便客户端代码可以使用两者中的任何一个而无需更改),则可以重写中的“禁止”方法并让它们抛出一个 .例如:BABUnsupportedOperationException

public class A
{
    public int allowedMethod() { ... }
    public int forbiddenMethod() { ... }
}

public class B extends A
{
    public int forbiddenMethod()
    {
        throw new UnsupportedOperationException("Sorry, not allowed.");
    }
}

或者,如果您真的希望 API 是 的 API 的子集,则只需包含 的实例,并适当地委托方法调用。BABA

    public class A
    {
        public int allowedMethod() { ... }
        public int forbiddenMethod() { ... }
    }

    public class B
    {
        private A a;

        public int allowedMethod()
        {
            return a.allowedMethod();
        }
    }

答案 2

使用组合而不是继承

即.class B持有对类A的引用,并在其内部调用方法。