如何以某种方式实例化部分实现接口的类

nit*_*710 0 java oop

假设我有一个界面IBird.它有许多方法,如eat(),walk(),run()fly().

如果基类Ostrich想要实现IBird,应该怎么做呢?因为Ostrich不能飞,但可以做其他所有的东西IBird.

eli*_*spr 5

你可以做Ostrich abstract.这可能在某些情况下有效,但不是在这里,因为每个实例Ostrich都必须实现缺少的功能.

正如所Johny指出的那样,另一种选择是抛出一个UnsupportedOperationException.但这可能会导致意外崩溃,这对用户不利.

第三种方法是fly()从界面中删除方法IBird,只留下所有鸟共享的东西.然后你创建另一个IBirdThatCanFly扩展的接口IBird.然后,您可以添加缺少的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() { ... }
}
Run Code Online (Sandbox Code Playgroud)