如何解决如何从父级引用调用子级方法?
| 我有一个名为class0ѭ的超类,它有多个孩子,孩子也有孩子。我动态地设置了对象类型,但最终类型引用是“ 0”。这是我用来确定类类型的代码:private DataItem getDataItemUponType(DataSection parent,Element el) {
String style = getItemStyle(parent,el);
if(style!=null) {
if(style.equals(\"DUZ\")) {
return new DataItemPlain();
} else if(style.equals(\"TVY\")) {
return new DataItemPaired();
} else if(style.equals(\"TVA\")) {
return new DataItem();
} else if(style.equals(\"FRM\")) {
return new DataItemForm();
} else if(style.equals(\"IMG\")) {
return new DataItemImage();
} else if(style.equals(\"CLN\")) {
return new DataItemCalendar();
} else if(style.equals(\"BTN\")) {
return new DataItemButton();
} else if(style.equals(\"ALT\")) {
return new DataItemSubRibbon();
}
} else {
// At least return a DataItem.
return new DataItem();
}
return new DataItem();
}
然后我用它来设置我的对象:
DataItem dataItem = getDataItemUponType(parent,element);
然后我想从子类型“ 0”调用。我怎么做?
注意:我需要使用DataItem
,因此将其抽象化对我而言不起作用。
解决方法
您正试图打破抽象的概念:使用DataItem应该没问题。它应该具有您实际要调用的所有方法。这是主要思想:
Have an interface to describe the communication and hide the implementation.
尝试重新考虑您的设计。
, 您可能想要像这样使用instanceof
关键字:
if (o instanceof DataItemRibbon)
((DataItemRibbon)o).doSomething();
编辑
我同意弗拉基米尔·伊万诺夫(Vladimir Ivanov)的观点,尽管我写的作品行得通,但是这表明设计不好。您应该像弗拉基米尔(Vladimir)建议的那样对对象层次进行重新设计。
, 您可以检查您的DataItem对象是否是某个DataItem子类的实例。之后,您只需要将此对象转换为该类,即可调用其方法。
, 您可以在DataItem
上调用被子类覆盖的方法。实际类型的方法就是所谓的方法。这是一种标准的多态技术。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。