假设我有一个界面 IBird
。它有很多方法如 eat()
, walk()
, run()
和fly()
.
如果是基类Ostrich
想要实现IBird
,那该怎么办呢?因为Ostrich
不会飞,但可以做IBird
中的所有其他事情。
最佳答案
你可以制作Ostrich
抽象
。这在某些情况下可能有效,但在这里不行,因为 Ostrich
的每个实例都必须实现缺少的功能。
正如Johny
指出的那样,另一种选择是抛出UnsupportedOperationException
。但这可能会导致意外崩溃,这对用户不利。
第三种方法是从接口(interface) IBird
中删除方法 fly()
,只保留所有鸟共享的内容。然后,您创建另一个扩展 IBird
的接口(interface) IBirdThatCanFly
。然后您可以添加缺少的 fly()
方法。
public interface IBird { //all birds
public void eat();
public void walk();
public void run();
}
public interface IBirdThatCanFly extends IBird { //birds that can fly
public void fly();
}
public class Ostrich implements IBird { //Ostrich can't fly
public void eat() { ... }
public void walk() { ... }
public void run() { ... }
}
关于java - 如何以某种方式实例化部分实现接口(interface)的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45641807/