java - Java中多重继承的替代方案

标签 java multiple-inheritance

我创建了两个bean

class BackPageBean{
   String backPage = null;
  :
  :
  :
}


class InformationMessageBean{
   String informationMessage = null;
  :
  :
  :
}

现在,如果一个类是支持后台的,那么它会扩展 backPageBean,或者如果它需要显示某种消息,那么它会扩展 InformationMessageBean。

class BackPageAware extends backPageBean{
}

class InfoMessAware extends InformationMessageBean{
}



    someFunction () {
       if ( theObject instanceOf backPageBean ) {
              prepareTheBackPage ( theObject.getBackPage() );
       }

       if ( theObject instanceOf InformationMessageBean ) {
              showtheInformation ( theObject.getMessage() );
       }

   }

现在的问题是,如果我想要一个既是 BackPageAware 又是 InformationAware 的 bean,因为我们没有多重继承,应该采用什么方法?

最佳答案

只是为了澄清我的评论。

Just like Darth Eru says you create the two interfaces and the two default implementations. When you have a bean that needs both of the behaviours you have that class implement the two interfaces but you also create variables of the default implementations. This way you still dont need to duplicate any code.

    interface InfoMessAware {

         String getMessage();
    }

    interface BackPageAware {

         String getBackPage();
    }

class DefaultInfoMessAware {
         String getMessage() {
             return "message";
         }
}

class DefaultBackPageAware {
         String getBackPage() {
             return "backPage";
         }
}

    class MyBean implements InfoMessAware, BackPageAware {
         private InfoMessAware messAware = new DefaultInfoMessAware();
         private BackPageAware backPageAware = new DefaultBackPageAware();

         String getMessage() {
             return messAware.getMessage();
         }

         String getBackPage() {
             return backPageAware.getBackPage();
         }
    }

关于java - Java中多重继承的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1038314/

相关文章:

c++ - 多重继承的麻烦。如何调用基函数?

java - GConf 错误 : Failed to contact configuration server

java - 如何输入 SQL 查询以从 SQLite Netbeans 中的字符串中查找部分匹配项?

java - GWT 2.8 无法使自定义链接器工作

c++ - 调用非虚拟成员时消除基类歧义

python - 从父类继承的孙子 - Python

java - struts2,使用静态参数调用 session 变量方法

java - 将 NumberPicker 值添加到数据库

c++ - 在 C++ 的派生类中对基类方法(构造函数除外)进行别名的简单方法

java-8 - Java 8 没有提供与解决接口(interface)默认方法相同的解决方案来允许多重继承