使用多个类实现一个接口

时间:2015-08-03 12:05:52

标签: java

这个问题在接受我的采访时被问到了。我在这里厌倦了谷歌搜索。

我有100个方法的界面。我不想在一个类中实现所有这100个方法。有没有办法通过使用多个类而不重复实现来实现这100个方法?

例如: A类实现前10个方法(仅)。 B类实现接下来的10个方法(仅限),依此类推。

注意: 1.实现接口的所有类必须具体。

据我对java的了解,这是不可能的。当他问我这个问题时,他提到了适配器。这让我觉得有办法做到这一点。

有人可以澄清一下吗?

6 个答案:

答案 0 :(得分:2)

编写一个具有100个方法的空实现的适配器

 class Adapter{
    //write your empty implementations here as similar to KeyListener in Java
    // They have written a keyAdapter and make use of key adapter.

    }

ie) class Adapter implements interface1{
    public void method1(){}
    public void method2(){}
     .....
}

您可以在其他类中扩展适配器类,只需覆盖这些方法。

class A extedns Adapter{
    public void method1(){
}
}

ie)

答案 1 :(得分:2)

编写所有类(ABCDE每个实现20种方法)彼此扩展而不实现接口I

                    I
                    |
A <- B <- C <- D <- E

只有最后一个实现了接口。

更简单的例子只有两种方法:

public interface I {

    void a();

    void b();

}

public class A {

    public void a() {

    }

}

public class B extends A implements I {

    public void b() {

    }

}

答案 2 :(得分:2)

您描述的概念称为部分类,Java没有这样的概念。

以下是类似的答案:A way to implement partial classes in java

答案 3 :(得分:2)

如果您使用Java 8,则可以在界面中为100种方法定义默认实现,例如:

public interface MyInterface{

    void methodA();

    int methodB();

    default boolean methodC(String name) {
        return name.equals("Default");
    }
}

然后在您的具体类中,您只实现所需的方法。所有其他未覆盖的方法将使用接口的默认实现。

您必须在接口中编写100个默认实现,但它将节省您在实现该接口的每个具体类中编写100个实现的需要。

同样,这仅在Java 8之后可用。

答案 4 :(得分:2)

如果接口方法使用默认实现定义;

$(document).ready(function () {
    // Declare the var
    var num = 0;

    // Function to be called every 5 secs
    var update = function() {
      $.ajax({
        url: '/number.php',
        type: 'get',
        success: function (output) {
            return output;
        }
      });
    };

    // Every 5 secs call update(), check if return a number > 0, and add it to num var
    setInterval(function () {
        var out = update();
        if (out > 0) {
            num += out;
        }
        console.log(num);
    }, 5000);
});

即使没有继承类,也可以彼此独立,并且可以为不同的方法提供实现

答案 5 :(得分:1)

你是对的 - 任何具体的类必须实现所有方法,所以你不能做到的唯一方法是扩展实现给定接口的类并覆盖子类中的一些方法或实现从其他类调用实现的方法