继续这个问题:为什么不能降低Java子类中方法的可见性?
我需要创建B几乎与类相同的类A,除了B不能做某些事情A.
作为一个懒惰的程序员,我试图继承A,只是为了迎接错误,B不能降低A方法的可见性.咄!..
现在A是来自供应商的API,我的目的是封装此API,以便更容易使用.
我想知道解决这个问题的最佳做法是什么?
Gro*_*uez 18
两种选择:
如果您需要B保持相同的接口A(以便客户端代码可以使用这两个中的任何一个而不进行更改),您可以覆盖"禁止"方法B并让它们抛出UnsupportedOperationException.例如:
public class A
{
public int allowedMethod() { ... }
public int forbiddenMethod() { ... }
}
public class B extends A
{
public int forbiddenMethod()
{
throw new UnsupportedOperationException("Sorry, not allowed.");
}
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您确实希望API成为API的B子集A,那么只需B包含一个实例A,并适当地委托方法调用.
public class A
{
public int allowedMethod() { ... }
public int forbiddenMethod() { ... }
}
public class B
{
private A a;
public int allowedMethod()
{
return a.allowedMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
即,B类持有对A类的引用,并在其上内部调用方法.