扩展 ABAP 中重写方法的接口



众所周知,不能在继承的ABAP类中扩展或重新定义被覆盖方法的接口。 帮助:

方法

的接口和类别(常规或功能实例方法或事件处理程序(不会在重定义中更改。

这包括全局类和局部类的重定义。

如果要添加或删除方法参数或更改其类型,此限制的可能解决方法是什么?可选参数是一种方式,虽然不是很舒服。还有其他方法吗?

不能在其实现中以任何方式更改接口方法的签名。这仅仅是因为没有办法在运行时产生难以分析的语法错误。接口是一个合约 - 任何实现它的类都承诺它将实现接口中存在的所有方法(和变量...(。

假设有一个方法METH接口IF1采用TYPE1类型的单个参数PAR1。如果您现在编写一个类来实现具有TYPE2类型的单个参数PAR1的方法METH,那么您还没有编写实现IF1的类。将类型TYPE1的参数传递给类的方法的调用方将遇到类型转换错误(是在运行时还是在编译时在某种程度上取决于类型的泛型(。

因此,无法在不产生此类运行时错误的情况下更改接口方法在其重定义中的签名 - 您的类实现接口。实现接口意味着类将准确接受为接口中的方法指定的参数的数量、类型和类型。实际上,没有任何用例可以有意义地想要更改它,同时仍然声称您的类实现了接口。无论你想做什么,这都不是解决方案。

您可以创建自己的接口,扩展现有接口。添加具有不同参数的相同方法。然后从扩展接口创建抽象类,并使用代码填充方法,以调用 real 方法,并将值设置为可选参数。然后从抽象创建您的类。

interface
|--> extented interface
|--> abstract class
|--> class

最新更新