如何在扩展Abstract Class的类中跳过一个方法?

时间:2013-08-27 12:14:24

标签: java inheritance abstract-class

我有一个名为Animal的抽象类,有大约100种方法,包括swim

Dog,Cat,Lion等许多课程正在扩展该课程。

现在有一只动物长颈鹿无法游泳。但它正在扩展Animal抽象类。

我希望长颈鹿对象没有swim方法。

Giraffe g = new Giraffe();
//g.swim();  // This swim should not come.

我无法改变动物类。 一种解决方案是创建一个复制除游泳之外的所有方法的抽象类。 但这不是一个好方法。

我如何使用Animal抽象类来做到这一点? 预先感谢。

4 个答案:

答案 0 :(得分:2)

您不能通过合同生成java指南。如果你说Animal可以游泳,那么所有动物都可以游泳,包括长颈鹿,如果不是,那么长颈鹿它不是动物。

你唯一能做的就是不改变动物

@Override
public void swim(){
 throw new UnsupportedOperationException();
}

你可以做的另一件事就是建立另一个班级

public class Giraffe {

private final Animal a;

public Giraffe(Animal a){
  this.a=a;
}

public void method1(){
  a.method1();
}

public Something drink(){
  return a.drink();
}
.
.
.
// and not implementing swim 
}

另一个是为Animal制作一个没有swim()方法的超级界面,并让Animal实现它。

答案 1 :(得分:0)

您不能跳过swim()的定义。但是,您可以针对此类情况抛出异常。

void swim() throws CanNotSwimException{
}

答案 2 :(得分:0)

在我看来,最优雅的解决方案是覆盖方法,并抛出 OperationNotSupportedException

答案 3 :(得分:-1)

根据具体情况,您也可以将方法留空,如果是void