java - 用静态方法调用子类

标签 java inheritance interface subclass

我有时需要静态调用子类方法的行为。 例如,我有一组 messengers。我需要在每个实现中调用一次或两次,我不想保留它们的 super 接口(interface)的变量,因为那时我需要为所有方法描述一个方法,或者所有方法都必须覆盖几个方法描述。而且它们不会是静态的。

我希望能够执行类似Messenger.MessageErrorMessage.send(param)Messenger.MessageDefaultMessage 等操作...需要将它们绑定(bind)到父类(super class), 但在调用子类方法时仍然保持静态行为。

所以我在下面做了这个: 该接口(interface)具有调用子类静态方法的公共(public)内部类,名称唯一的变化是 MessageErrorMessages (实际子类) MessageErrorMessage (内部类)只需要从复数名称更改名称单数名称。

  Interface Messenger{
     public static final class MessageErrorMessage{
        public static void send(Message message){
          MessageErrorMessages.send(Message);
        }
     }
     public static final class MessageDefaultMessage{
        public static void send(Message message){
           MessageDefaultMessages.send(Message);
        }
     }
  }

Messenger 界面的实际实现..

 MessageErrorsMessages implements Messenger {
        public static void send(Message message){
        //..Implementation of send
        }
    }

Messenger 界面的实际实现..

   MessageDefaultMessages  implements Messenger{
        public static void send(Message message){
        //..Implementation of send
        }
    }

这样我就不必记住 20 种不同类型的 Messenger 子类并需要保留它们的变量。 这是否违反了任何设计规则?

编辑: 我希望能够写

Messenger.MessageException.send(message, throwable);

同时

Messenger.MessageDefaultMessage.send(message);

我希望子类具有自己独特的行为和方法说明,但仍收集在 Messenger 下。

最佳答案

我不确定你想要完成什么(我不确定我是否理解你的问题)但你似乎想基本上覆盖子类中的静态方法,这样你就可以调用实例上的方法并拥有它委托(delegate)给子类方法。这根本不可能。任何静态方法都将在您调用它们的类上调用(请注意,您是在类上调用静态方法,不是在实例上。如果您尝试调用一个类,大多数编译器/IDE 会发出警告实例上的静态方法,因为这可能会掩盖您实际调用它的类)。

关于java - 用静态方法调用子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31291097/

相关文章:

java - 对具有两个不同对象的数组进行排序

java - 从 GAE 数据存储中读取多对多对象的最有效方法

Java:集合中的接口(interface)未被识别为参数

javascript - 如何在具有多个继承属性的 Javascript 中表示分层产品目录 [分类法]?

interface - 在 serverHTTP 中出错,但在我的代码中却没有,为什么?

javascript - typescript :定义没有特定键和链对象的接口(interface)

将多个集合作为一个访问的Java方法,无需连接

java - 从 Clojure 调用 java 函数

java - main 中的 String[] args

C++ : calling an abstract base class constructor/undefined symbol in shared object