我有一个名为Animal
的抽象类,有大约100种方法,包括swim
。
Dog,Cat,Lion等许多课程正在扩展该课程。
现在有一只动物长颈鹿无法游泳。但它正在扩展Animal
抽象类。
我希望长颈鹿对象没有swim
方法。
Giraffe g = new Giraffe();
//g.swim(); // This swim should not come.
我无法改变动物类。 一种解决方案是创建一个复制除游泳之外的所有方法的抽象类。 但这不是一个好方法。
我如何使用Animal抽象类来做到这一点? 预先感谢。
答案 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
。