写点什么

你真的会用 ABAP, Java 和 JavaScript 里的 constructor 么?

用户头像
Jerry Wang
关注
发布于: 2021 年 05 月 23 日
你真的会用ABAP, Java和JavaScript里的constructor么?

如果 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 的原创技术文章,请关注公众号"汪子熙":



发布于: 2021 年 05 月 23 日阅读数: 8
用户头像

Jerry Wang

关注

个人微信公众号:汪子熙 2017.12.03 加入

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使。

评论

发布
暂无评论
你真的会用ABAP, Java和JavaScript里的constructor么?