在从JDK 8开始的Java中,可以在方法签名的开头使用关键字default
在接口中定义方法的默认实现,这主要是为了能够向接口添加新功能,并确保与为这些接口的旧版本编写的代码兼容.
除了默认方法之外,还可以在一个接口中定义static
个方法,这使得在库中组织帮助器方法变得更容易,并使静态方法特定于同一接口中的接口,而不是在单独的类中.
在ABAP中有可能发生这样的事情吗?
由于我没有太多使用ABAP OO的经验,我没有找到确切的答案.
在从JDK 8开始的Java中,可以在方法签名的开头使用关键字default
在接口中定义方法的默认实现,这主要是为了能够向接口添加新功能,并确保与为这些接口的旧版本编写的代码兼容.
除了默认方法之外,还可以在一个接口中定义static
个方法,这使得在库中组织帮助器方法变得更容易,并使静态方法特定于同一接口中的接口,而不是在单独的类中.
在ABAP中有可能发生这样的事情吗?
由于我没有太多使用ABAP OO的经验,我没有找到确切的答案.
不幸的是,这在ABAP中是不可能的.
接口contains only definitions和实际实现必须在实现该接口的类中提供.接口的所有方法都是抽象的(即,它们是完全定义的,包括它们的签名,但没有实现).
与类不同,它根本不是接口does not have an implementation section.默认情况下,所有组件都在公共部分,那里有no visibility sections个组件,界面的所有组件都是可见的.
接口可以包含以下组件:
TYPES
、DATA
、CLASS-DATA
、CONSTANTS
:数据类型和数据对象METHODS
, CLASS-METHODS
, EVENTS
, CLASS-EVENTS
: methods and eventsINTERFACES
: inclusion of component interfaces;ALIASES
: alias names for components of interfacesAs we can see CLASS-METHODS
indeed allows to define static method declarations, and the static methods are just NOT instance specific. It means that when a class implements such an interface, the methods defined as static do not require an instance to access / call them and they rather can be called on the class itself like class_name=>interface_name~static_method_name
.
So actually the purpose of declaring a method as static in an interface definition is to create an agreement that a particular method will not depend on an instance to work.
然而,还有PUBLIC
和DEFAULT
个关键字可能会在接口定义中使用,这在一开始可能会导致混淆.
接口定义如下所示:
INTERFACE intf [PUBLIC].
[components]
ENDINTERFACE.
加法PUBLIC
使接口成为类库的全局接口,并且只能用于接口池的全局接口,并且在创建全局接口时由类构建器创建.
从Release 7.40, SP08开始提供关键字DEFAULT
METHODS meth [ABSTRACT|FINAL] | [DEFAULT IGNORE|FAIL] ...
CLASS-METHODS meth [DEFAULT IGNORE|FAIL] ...
语句METHODS
和CLASS-METHODS
的加法DEFAULT
可用于使这些方法成为可选的.实现接口时在类中显式显示的可选接口方法does not need to be implemented.相反,在定义中为非实现方法的调用指定了默认行为:
DEFAULT IGNORE
-行为与使用空体实现时的行为相同DEFAULT FAIL
- raise an exception of the class CX_SY_DYN_CALL_ILLEGAL_METHOD
CALL_METHOD_NOT_IMPLEMENTED
is raised当然,您可以使用继承来实现基本方法,使用实现的方法创建(抽象)类,并在必要时在子类(关键字方法)中重新植入/覆盖它们.REDIFINITION
).