繁体   English   中英

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

[英]How I can skip one method in a class extending Abstract Class?

我有一个抽象类叫Animal它有大约100种方法,包括swim

Dog,Cat,Lion等许多类都在扩展该类。

现在有只不会游泳的动物长颈鹿。 但是它扩展了Animal抽象类。

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

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

我不能改变动物等级。 一种解决方案是创建另一个抽象类,该类将复制除了游泳之外的所有方法。 但这不是一个好方法。

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

您不能按合同安排Java指南。 如果您说Animal可以游泳,那么所有动物都可以游泳,包括长颈鹿,如果不是,则说它不是动物。

您唯一可以做的就是不更改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实现它。

您不能跳过swim()的定义。 但是,在这种情况下,您可以抛出异常。

void swim() throws CanNotSwimException{
}

我认为,最优雅的解决方案是重写方法,并抛出OperationNotSupportedException

根据情况,如果方法为void ,则也可以将其保留为空白。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM