![](/img/trans.png)
[英]How to access the abstract class method without extending the Abstract class in java
[英]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.