使用接口实现对所有类执行操作

时间:2015-12-11 19:41:10

标签: java interface listener

我编写了这段代码,我需要在Class3中创建一个监听器来调用接口“MethodsListener”的所有覆盖方法,我该如何实现呢?

当在Class3中调用接口MethodsListener的任何函数时,我需要在实现此接口的所有类中运行此函数,在下一个示例中,当我调用函数Method2时在Class3我需要在Method2中运行Class1

我编写了这段代码,我需要在Class3中创建一个监听器来调用接口MethodsListener的所有覆盖方法,我该如何解决?

当在Class3 i中调用接口MethodsListener的任何函数时,我需要在实现此接口的所有类中运行此函数,在下一个示例中,当我调用函数{{1 Method2中的Class3我需要在Method2中运行Class1

所有类都以独立的线程运行。

这是示例代码:

public class Class1 implements MethodsListener {
    public static void main(String[] argv) {
        new Thread(new Class2()).start();
    }

    @Override
    public void method1(String message) {
        System.out.println("Method 1 executed, message: " + message);
    }
    @Override
    public void method2(String message) {
        System.out.println("Method 2 executed, message: " + message);
    }
}

public class Class2 implements Runnable {
    @Override
    public void run() {
        new Thread(new Class3()).start();
    }
    /*...*/
}

public class Class3 implements Runnable, MethodsListener {

    @Override
    public void run() {
        method1("MSG 1");
        method2("MSG 2");
    }

    @Override
    public void method1(String message) {
        System.out.println("Executing Method 1");
    }
    @Override
    public void method2(String message) {
        System.out.println("Executing Method 2");
    }
}

interface MethodsListener {
    public abstract void method1(String message);
    public abstract void method2(String message);
}

在这个例子的输出中,我需要得到:

Executing Method 1
Method 1 executed, message: MSG 1
Executing Method 2
Method 2 executed, message: MSG 2

1 个答案:

答案 0 :(得分:1)

可能你可能想要这个代码。为简单起见,我在一个java文件中测试了所有代码。只需在eclipse或您使用的任何IDE中创建Class1.java并通过以下代码。所有三个类和接口都应该在同一个Class1.java文件中。虽然您可以为每个文件创建单独的文件。

class Class1 {
    public static void main(String[] argv) {
        new Thread(new Class3()).start();
    }
}

class Class2 implements MethodsListener {

@Override
public void method1(String message) {
        System.out.println("Method 1 executed, message: " + message);
    }
    @Override
    public void method2(String message) {
        System.out.println("Method 2 executed, message: " + message);
    }
}

class Class3 extends Class2 implements Runnable {

    @Override
    public void run() {
        method1("MSG 1");
        method2("MSG 2");
    }

    @Override
    public void method1(String message) {
         System.out.println("Executing Method 1");
         super.method1(message);
    }
    @Override
    public void method2(String message) {
        System.out.println("Executing Method 2");
        super.method2(message);
    }
}

interface MethodsListener {
    public abstract void method1(String message);
    public abstract void method2(String message);
}