使用静态方法调用子类

时间:2015-07-08 11:17:58

标签: java inheritance interface subclass

我有时需要静态调用子类方法的行为。 在示例中,我有一组messengers。我需要在每个实现中调用一次或两次,我不想保留其超级接口的变量,因为那时我需要为所有人提供一个方法描述,或者几个人都必须覆盖它们。他们不会是静止的。

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

所以我在下面做了这个: 该接口具有公共内部类,它调用子类静态方法,名称中唯一的更改为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下收集。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如果我理解正确,您希望能够使用*Messages类中的静态方法,并且具有委派给相应Messenger类的通用*Messages类。除了你提出的方法之外,我不知道你怎么做。

那就是IMO,您应该在应用程序代码中使用Messenger*Messages类。使用两者会导致混乱。