在我的具体类中,我需要实现(set public)只抽象类的某些方法。所以我无法扩展它,因为所有的抽象方法都是公开的。
我可以使用组合,转发我需要的方法,但我显然需要实现抽象类。 所以,我想知道,在私有类中实现抽象类然后在父类中只转发内部类所需的方法是一种好方法吗?
例如:
public class ConcreteClass{
private InnerClass inner = new InnerClass();
public String fwMethod() {
return inner.method1();
}
private class InnerClass extends AbstractClass {
public String method1(){ ...}
public String method2(){ ...}
}
}
有更好的方法吗?
答案 0 :(得分:1)
抽象类的具体子类必须至少提供抽象方法的最小实现。
您可以实现您不想实现的方法来抛出未经检查的异常。 UnsupportedOperationException
是不错的选择,或者您可以使用更具体的含义来实现自己的类。
您可以将子类声明为abstract
...但这意味着您将无法实例化它。
您可以重构基类和接口,以便您的具体类可以实现更少的抽象方法。
答案 1 :(得分:1)
为什么不修改抽象类以从其他类继承,并且只实现具有所需方法的抽象类?
示例如果你只需要aa,ab而不是aa,ab,aaa,aab: A类,方法aa,ab B类,方法aaa,aab B继承自A。
您的具体类继承自A并且只能访问aa和ab,从而避免使用aaa,aab的实现。
答案 2 :(得分:0)
实现您需要的方法,并在您不想实现的任何方法上抛出UnsopportedOperationException。
http://docs.oracle.com/javase/7/docs/api/java/lang/UnsupportedOperationException.html