资讯专栏INFORMATION COLUMN

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

luxixing / 820人阅读

摘要:如果里调用了一个成员方法,这个方法被子类了,当初始化一个子类实例时,父类的构造函数被的调用,此时父类构造函数的上下文里调用的成员方法,是父类的实现还是子类的实现你能不用运行代码,就能准确说出这些语句会打印什么出来呢测试测试结果测试

如果constructor里调用了一个成员方法,这个方法被子类override了,当初始化一个子类实例时,父类的构造函数被的调用,此时父类构造函数的上下文里调用的成员方法,是父类的实现还是子类的实现?
你能不用运行代码,就能准确说出这些语句会打印什么出来呢?

ABAP

</>复制代码

  1. class ZCL_SUPER definition
  2. public
  3. create public .
  4. public section.
  5. methods CONSTRUCTOR .
  6. methods SET_I
  7. importing
  8. !IV_I type INT4 .
  9. protected section.
  10. private section.
  11. data MV_SUPER type INT4 .
  12. ENDCLASS.
  13. CLASS ZCL_SUPER IMPLEMENTATION.
  14. method CONSTRUCTOR.
  15. me->set_i( 100 ).
  16. endmethod.
  17. method SET_I.
  18. me->mv_super = iv_i.
  19. endmethod.
  20. ENDCLASS.
  21. class ZCL_SUB definition
  22. public
  23. inheriting from ZCL_SUPER
  24. final
  25. create public .
  26. public section.
  27. methods PRINT .
  28. methods SET_I
  29. redefinition .
  30. protected section.
  31. private section.
  32. data MV_SUB type I value 1 ##NO_TEXT.
  33. ENDCLASS.
  34. CLASS ZCL_SUB IMPLEMENTATION.
  35. method PRINT.
  36. WRITE: / " sub:" , mv_sub.
  37. endmethod.
  38. METHOD set_i.
  39. super->set_i( iv_i = iv_i ).
  40. me->mv_sub = iv_i.
  41. WRITE: / "mv_sub assigned by: " , iv_i.
  42. ENDMETHOD.
  43. ENDCLASS.

测试:

</>复制代码

  1. NEW zcl_sub( )->print( ).

测试结果:sub: 1

Java

</>复制代码

  1. public class SuperClass {
  2. private int mSuperX;
  3. public SuperClass() {
  4. setX(99);
  5. }
  6. public void setX(int x) {
  7. mSuperX = x;
  8. }
  9. }
  10. public class SubClass extends SuperClass {
  11. private int mSubX = 1;
  12. public SubClass() {}
  13. @Override
  14. public void setX(int x) {
  15. super.setX(x);
  16. mSubX = x;
  17. System.out.println("SubX is assigned " + x);
  18. }
  19. public void printX() {
  20. System.out.println("SubX = " + mSubX);
  21. }
  22. }

test:

</>复制代码

  1. public static void main(String[] args) {
  2. SubClass sc = new SubClass();
  3. sc.printX();
  4. }

测试结果:

JavaScript

</>复制代码

  1. function SuperClass(){
  2. this.setX(99);
  3. }
  4. SuperClass.prototype = {
  5. mSuperX : 0,
  6. setX : function(x){
  7. this.mSuperX = x;
  8. }
  9. };
  10. function SubClass(){
  11. SuperClass.call(this);
  12. this.mSubX = 1;
  13. }
  14. SubClass.prototype = new SuperClass();
  15. SubClass.prototype.setX = function(x){
  16. SuperClass.prototype.setX(x);
  17. this.mSubX = x;
  18. console.log("SubX is assigned " + x);
  19. };
  20. SubClass.prototype.print = function(){
  21. console.log("SubX: " + this.mSubX);
  22. }

test:

</>复制代码

  1. var sub = new SubClass();
  2. sub.print();

测试结果:

详细分析在我的SAP community博客里: A reminder for using constructor in OO world

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68983.html

相关文章

  • 真的会用ABAP, JavaJavaScript里的constructor?

    摘要:如果里调用了一个成员方法,这个方法被子类了,当初始化一个子类实例时,父类的构造函数被的调用,此时父类构造函数的上下文里调用的成员方法,是父类的实现还是子类的实现你能不用运行代码,就能准确说出这些语句会打印什么出来呢测试测试结果测试 如果constructor里调用了一个成员方法,这个方法被子类override了,当初始化一个子类实例时,父类的构造函数被的调用,此时父类构造函数的上下文里...

    yeooo 评论0 收藏0
  • 真的会用ABAP, JavaJavaScript里的constructor?

    摘要:如果里调用了一个成员方法,这个方法被子类了,当初始化一个子类实例时,父类的构造函数被的调用,此时父类构造函数的上下文里调用的成员方法,是父类的实现还是子类的实现你能不用运行代码,就能准确说出这些语句会打印什么出来呢测试测试结果测试 如果constructor里调用了一个成员方法,这个方法被子类override了,当初始化一个子类实例时,父类的构造函数被的调用,此时父类构造函数的上下文里...

    huaixiaoz 评论0 收藏0
  • ABAP程序给佛祖开过光?来试试Jerry这个小技巧

    摘要:实现步骤非常简单,在标准程序的内创建一个隐式增强。禁止在测试服务器和生产服务器使用否则由此造成的一切负面后果,本人及概不负责。 最近Jerry在忙一个项目,技术栈换成了nodejs平台,语言换成了JavaScript,因为赶项目进度,一直没时间更新公众号。感谢大家的支持,关注人数还是慢慢地增长到了3000。 showImg(https://segmentfault.com/img/re...

    SQC 评论0 收藏0

发表评论

0条评论

luxixing

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<