如果constructor里调用了一个成员方法,这个方法被子类override了,当初始化一个子类实例时,父类的构造函数被的调用,此时父类构造函数的上下文里调用的成员方法,是父类的实现还是子类的实现?
你能不用运行代码,就能准确说出这些语句会打印什么出来呢?
ABAP
class ZCL_SUPER definition
public
create public .
public section.
methods CONSTRUCTOR .
methods SET_I
importing
!IV_I type INT4 .
protected section.
private section.
data MV_SUPER type INT4 .
ENDCLASS.
CLASS ZCL_SUPER IMPLEMENTATION.
method CONSTRUCTOR.
me->set_i( 100 ).
endmethod.
method SET_I.
me->mv_super = iv_i.
endmethod.
ENDCLASS.
class ZCL_SUB definition
public
inheriting from ZCL_SUPER
final
create public .
public section.
methods PRINT .
methods SET_I
redefinition .
protected section.
private section.
data MV_SUB type I value 1 ##NO_TEXT.
ENDCLASS.
CLASS ZCL_SUB IMPLEMENTATION.
method PRINT.
WRITE: / ' sub:' , mv_sub.
endmethod.
METHOD set_i.
super->set_i( iv_i = iv_i ).
me->mv_sub = iv_i.
WRITE: / 'mv_sub assigned by: ' , iv_i.
ENDMETHOD.
ENDCLASS.
测试:
NEW zcl_sub( )->print( ).
测试结果:sub: 1
Java
public class SuperClass {
private int mSuperX;
public SuperClass() {
setX(99);
}
public void setX(int x) {
mSuperX = x;
}
}
public class SubClass extends SuperClass {
private int mSubX = 1;
public SubClass() {}
@Override
public void setX(int x) {
super.setX(x);
mSubX = x;
System.out.println("SubX is assigned " + x);
}
public void printX() {
System.out.println("SubX = " + mSubX);
}
}
test:
public static void main(String[] args) {
SubClass sc = new SubClass();
sc.printX();
}
测试结果:
JavaScript
function SuperClass(){
this.setX(99);
}
SuperClass.prototype = {
mSuperX : 0,
setX : function(x){
this.mSuperX = x;
}
};
function SubClass(){
SuperClass.call(this);
this.mSubX = 1;
}
SubClass.prototype = new SuperClass();
SubClass.prototype.setX = function(x){
SuperClass.prototype.setX(x);
this.mSubX = x;
console.log("SubX is assigned " + x);
};
SubClass.prototype.print = function(){
console.log("SubX: " + this.mSubX);
}
test:
var sub = new SubClass();
sub.print();
测试结果:
详细分析在我的SAP community博客里: A reminder for using constructor in OO world
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:
相关推荐
abap逻辑数据库ABAP数据库操作,abap过程中的小积累。用处多多哦
JAVA调用ABAP程序,与ABAP调用JAVA程序的实例,包含JCO的API及所需jar文件. 文档文件中是中文实例.
文档详细介绍了用myeclipse生成webservice的方法步骤,以及abap调用webservice 第一步:myeclipse生成webservice 第二部:发布webservice 第三步:在sap系统生成webservice代理 第四步:生成port 第五步:用实例调用...
abap and javascript
6.类似Java,ABAP开发的程序能运行于任何操作系统(Java有Java虚拟机,ABAP也有ABAP processor),多种数据库(比如在ABAP字典中实现了透明表对各种底层数据库表的映射,这样在ABAP层看到的透明表就和具体数据库无关),各种...
ABAP开发中的PP模块要点,内容很少。
java连接sap +jco3,代码成功测试,文件含有所需的类库。 限于window X86系统。
ABAP资料ABAP资料ABAP资料ABAP资料ABAP资料
ABAP 调用ABAP PROXY
Jerry 微信公众号文章 使用 JavaScript 上传 PDF 和 Excel 等二进制文件到 ABAP 服务器并进行解析 的附属资源,包含了文章介绍知识要点对应的源代码实现。
ABAP加密和解密
abap tips abap tips abap tips abap tips abap tips
ABAP - Keyword Documentation This documentation describes the syntax and meaning of the keywords of the ABAP language and its object-oriented part ABAP Objects. Alongside this, language frameworks ...
SAP ABAP与JAVA之间通过RFC传递数据实例
CEON ABAP Eclipse Editor
从零开始,教授如何配置 Eclipse 开发 SAP ABAP 程序环境。2020 年最新版本操作...ABAP Development Tool的Java端实现就是Eclipse的一个扩展,使用JCO(Java Connector)连接ABAP后台的adt服务,实现对ABAP程序的操作。
abap 函数大全 abap function abap function
IBM ABAP开发规范和命名规则ABAP开发规范和命名规则
ABAP开发环境和总体介绍
SAP ABAP 开发手册,对SAP上ABAP开发有很大的帮助,希望对在SAP上开发者能够提供帮助