语法错误在先前的INTERFACES语句中,方法" METH1"被声明为非抽象

2020-09-14 19:17发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)(重要:我将其发布为问题,但我已...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


(重要:我将其发布为问题,但我已经找到了解决方案,所以我也将其发布)

我在这里有一个错误(此代码是从ABAP文档中的接口,但我更改了接口的顺序):

接口intf1。
   方法meth1。
 结束界面。

 接口intf2。
   接口intf1。
   方法meth2。
 结束界面。

 类别cls定义摘要。
   公共部分。
     接口intf2抽象方法meth2。
     接口intf1抽象方法meth1。  " <===此处出现语法错误
 ENDCLASS。

我收到此语法错误:

在先前的INTERFACES语句中,方法" METH1"被声明为非抽象

为什么? 有什么解决方案?

6条回答
SKY徐
2020-09-14 19:34 .采纳回答

(请注意,在2011年也提出了相同的问题,并由 Suhas Saha ;您可能更喜欢他的答案,从技术上来讲,这还是一样的,但是我添加了有关ABAP 7.52的注释)

关于语法错误:实际上,以下语句使meth2抽象化,但也使其他方法具体化,尤其是intf1〜meth1

接口intf2抽象方法meth2。  

所以下一条语句

接口intf1抽象方法meth1。

与上一个将intf1〜meth1具体化的矛盾。

这就是语法错误的原因。

解决方案:要使程序编译,请切换两个INTERFACES语句:

接口intf1。
   方法meth1。
 结束界面。

 接口intf2。
   接口intf1。
   方法meth2。
 结束界面。

 类别cls定义摘要。
   公共部分。
     接口intf1抽象方法meth1。  "所以intf1〜meth1是抽象的
     接口intf2抽象方法meth2。 保持intf1〜meth1抽象!
 ENDCLASS。

这里引人注目的是这样的陈述

接口intf2抽象方法meth2。  

"保留intf〜meth1摘要"。 因此,根据先前的INTERFACES语句,如果已经在先前的INTERFACES语句中明确定义了抽象,则不会一直使intf1〜meth1变得具体。

---------------------------

新功能:请注意,从ABAP 7.52中可以避免此问题因为现在可以在INTERFACES内部使用〜(波浪号),所以您只能定义一个INTERFACES语句,如下所示(摘录自界面-抽象方法)

接口intf2抽象方法intf1〜meth1 meth2。  "有效期自7.52 

完整代码:

接口intf1。
    方法meth1。
 结束界面。

 接口intf2。
   接口intf1。
   方法meth2。
 结束界面。

 类别cls定义摘要。
   公共部分。
     接口intf2抽象方法intf1〜meth1 meth2。 从7.52起有效
 ENDCLASS。  

欢呼

一周热门 更多>