如果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, Java和JavaScript里的constructor么?的更多相关文章

  1. Jerry的ABAP, Java和JavaScript乱炖

    写这个系列的初衷是SAP Chengdu office有越来越多的应届毕业生加入,这些新同事通过在大学的专业学习,具备了Java和JavaScript背景,但是进入SAP之后大家觉得ABAP没有Jav ...

  2. 介绍一种在ABAP内核态进行内表高效拷贝的方法,和对应的Java和JavaScript版本的伪实现

    内表操作是ABAP开发人员几乎在每个ABAP程序里都会遇到的. 看一个例子:有两个行结构不一样的内表,每个内表的行结构有三列,除了name这一列名字一致外,其他两列的名称都不同,下图用红色和蓝色标注出 ...

  3. java和javascript真的有关系=。=

    相同点:1. 内存管理,两者都采用GC来对内存进行回收.因此Java与javascript的内存泄露情况十分相似. 2. 代码编译为机器码后由中间件执行:Java使用前会编译为字节码后由JVM执行,V ...

  4. paip.java 以及JavaScript (js) 的关系以及区别

    paip.java 以及JavaScript (js) 的关系以及区别 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:// ...

  5. WebView上实现Java与JavaScript交互

    在安卓开发上,考虑到开发效率和界面更新,有时使用WebView结合web页面技术,可以快速迭代地开发移动应用.WebView加载资源的速度并不慢,但是如果资源多了,就很慢.图片.css.js.html ...

  6. 30个深度学习库:按Python、C++、Java、JavaScript、R等10种语言分类

    30个深度学习库:按Python.C++.Java.JavaScript.R等10种语言分类 包括 Python.C++.Java.JavaScript.R.Haskell等在内的一系列编程语言的深度 ...

  7. Java 和 Javascript 的 Date 与 .Net 的 DateTime 之间的相互转换

    Java 和 Javascript 的 Date 对象内部存放的是从1970年1月1日0点以来的毫秒值. .Net 的 DateTime 对象内部存放的是从0001年1月1日12点以来的tick值,1 ...

  8. android之Java+html+javascript混合开发

    android开发,除了使用原生态的开发方式之外,还可以使用java+html+javascript混合开发的方式来开发,这样可以节省大量的开发时间,同时还可以使不同设备的用户获得相同的用户体验.好了 ...

  9. Java和JavaScript中使用Json方法大全

    林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka   摘要:JSON(JavaScript Object Notation) 是一种轻量级的数 ...

随机推荐

  1. asp.net搭建项目架构

    项目的架构决定这个项目的好坏. 今天我说说传统三层架构的搭建 第一步 创建一个解决方案 例如 TaskSystem 接着这个解决方案下创建六个项目分别: TaskSystem.DAL TaskSyst ...

  2. 3 不用IDE开发groovy

    1       不用IDE开发groovy 1.1  不用IDE开发的方法 可以在IDE中运行Groovy类或者脚本,但是Groovy也提供了其他运行途径.你能运行Groovy代码基于以下: ·    ...

  3. Spring配置问题:The prefix "util" for element "util:map" is not bound.

    在spring的头部文件中没有引入: xmlns:util=”http://www.springframework.org/schema/util” 原文:https://blog.csdn.net/ ...

  4. js中this指向

    JavaScript由于在运行期进行绑定的特性,JavaScript中的this可以是全局对象,当前对象或者任意对象,这完全取决于函数的调用方式 1.全局作用域或者普通函数中this指向全局对象win ...

  5. java——多线程的实现方式、三种办法解决线程赛跑、多线程数据同步(synchronized)、死锁

    多线程的实现方式:demo1.demo2 demo1:继承Thread类,重写run()方法 package thread_test; public class ThreadDemo1 extends ...

  6. DOM, DOCUMENT, BOM, WINDOW 有什么区别?

    DOM: DOM 全称是 Document Object Model,也就是文档对象模型. DOM 就是针对 HTML 和 XML 提供的一个API.什么意思?就是说为了能以编程的方法操作这个 HTM ...

  7. notepad++查看Log

    安装步骤:打开notepad++,插件→ Plugin Manager→ Show Plugin Manager→ Avaliable→ 等待插件列表刷新出来后,选中Android Logger插件→ ...

  8. liunx ssh

    ssh-keygen -t rsa 生成创建公匙 ssh username@ip 连接远程服务器

  9. [转]Loading, Editing, and Saving a Text File in HTML5 Using Javascript

    本文转自:http://thiscouldbebetter.wordpress.com/2012/12/18/loading-editing-and-saving-a-text-file-in-htm ...

  10. (转)vim(vi)常用操作及记忆方法

    vim(vi)常用操作及记忆方法 原文:https://www.cnblogs.com/doseoer/p/6241443.html vi(vim)可以说是linux中用得最多的工具了,不管你配置服务 ...