This question already has answers here:
not implementing all of the methods of interface. is it possible?
                                
                                    (10个回答)
                                
                        
                2年前关闭。
            
        

假设我有一个接口IBird。它具有许多方法,例如eat()walk()run()fly()

如果基类Ostrich要实现IBird,应该怎么做?因为Ostrich不能飞行,但是可以执行IBird中的所有其他操作。

最佳答案

您可以制作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() { ... }
}

10-08 16:49