Rak*_*yal 9 java multiple-inheritance
我创建了两个bean
class BackPageBean{
String backPage = null;
:
:
:
}
class InformationMessageBean{
String informationMessage = null;
:
:
:
}
Run Code Online (Sandbox Code Playgroud)
现在,如果一个类是反向识别的,那么它将扩展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() );
}
}
Run Code Online (Sandbox Code Playgroud)
现在问题是,如果我想要一个既是BackPageAware又是InformationAware的bean,因为我们没有多重继承,那么应该采用什么方法呢?
dfa*_*dfa 11
使用接口:
interface InfoMessAware {
String getMessage();
}
interface BackPageAware {
String getBackPage();
}
class MyBean implements InfoMessAware, BackPageAware {
String getMessage() {
return "message";
}
String getBackPage() {
return "backPage";
}
}
Run Code Online (Sandbox Code Playgroud)
然后用标准方法调用替换instanceof.
wil*_*ood 10
只是为了澄清我的评论.
就像Darth Eru说你创建了两个接口和两个默认实现.如果您有一个需要这两个行为的bean,那么该类实现了两个接口,但您也创建了默认实现的变量.这样你仍然不需要复制任何代码.
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();
}
}
Run Code Online (Sandbox Code Playgroud)
您描述的问题需要使用组合,而不是继承.该类是BackPageAware意味着它知道该类/功能.继承意味着它是一个BackPage.您已经描述了HAS A关系.
正如已经说过很多次了,使用接口定义的合同用于检索对象的信息HAS.
| 归档时间: |
|
| 查看次数: |
9517 次 |
| 最近记录: |