从父类访问子类变量

时间:2013-09-20 00:33:27

标签: java inheritance

我有这样的声明

TransactionItemDto itemDto = getTransactionItemMessage().getTransactionItemDto();

然后我有以下代码:

if (itemDto instanceof ChangeTransactionItemDto) {
            inputItem.setSiteCode(itemDto.getSiteCode()));
            inputItem.setBinLocation(itemDto.getBinLocation()));

        }

现在,我的变量“department”仅属于ChangeTransactionItemDto。但我目前无法在上面的if块中执行此操作:inputItem.setDepartment(itemDto.getDepartment()));

这是因为itemDto被声明为TransactionItemDto类型,而不是ChangeTransactionItemDto

我可以在调试过程中检查值,如果我在内部属于子类类型itemDto.getDepartment()。但声明给出了错误。 如何在ChangeTransactionItemDto上设置属于子类的部门inputItem

2 个答案:

答案 0 :(得分:0)

由于您已验证itemDto是否为实例ChangeTransactionItemDto,因此您随时可以致电inputItem.setDepartment(((ChangeTransactionItemDto)itemDto).getDepartment())

答案 1 :(得分:0)

如果超类需要访问特定于子类的字段,这是一种设计气味。

一个解决方法是将getter / setter拉入带有“do nothing”实现的超类中,然后那些使用它的子类用“do something”实现覆盖它。

这样,类层次结构中没有需要特殊处理的类 - 它们可以所有以相同的方式处理。