如果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. 解决mac下ssh空闲一段时间自动断开的问题

    之前在公司就遇到过这种问题,使用ssh登录linux服务器后,在后台放置一段时间,会发现会自动断开,解决的方法很简单: vim /etc/ssh/ssh_config 添加这2句即可 ServerAl ...

  2. http转https的各种应用

    http://www.lccee.com/content-57.html https://www.gworg.com/ssl/127.html apach: LoadModule socache_sh ...

  3. BeautifulSoup4模块的使用

    1. 安装 pip3 install beautifulsoup42. 使用 from bs4 import BeautifulSoup obj = BeautifulSoup("HTML内 ...

  4. APP微信支付实现

    参考官方文档 设计到的API: 统一下单API.支付结果通知API和查询订单API 下面代码是请求预支付ID // 构建下单bean final WxPayUnifiedOrderBean unifi ...

  5. my.赚钱

    http://mhxy.gamedog.cn/201503/999433.html   (发表于 2015-03-19) 梦幻西游手游四种赚钱技巧翻身做土豪教程,在游戏中玩家需要知道的就是赚钱方法是非 ...

  6. Webstrom 中写Vue没有代码提示如何解决?

    1. 如果你的Webstorm是2017版的,请更新到最新的2018,2018版本的webstorm自带了vue插件 找到 Help > About,查看你的Webstorm版本 2. 如果你的 ...

  7. [转]jQuery Mobile: Get data passed to page via changePage mobile.changePage

    本文转自:http://stackoverflow.com/questions/15840611/jquery-mobile-get-data-passed-to-page-via-changepag ...

  8. Sqlite操作的一些关键类的官方说明与Intent的startactivityforresult方法

    Intent: 该功能可以用于通过intent来跳转界面时候传递信号给原理的页面,以便做出一些处理: sqlite的使用: 该方法得到的sqlitedatabase可读可写,而getreadabled ...

  9. 使用python将元组转换成列表,并替换其中元素

    aa = (1, 2, 3, 4, 5, 6) b = [(x == 5 and 8 or x) for x in aa] z = map(lambda x: 8 if x == 5 else x, ...

  10. 【Linux】Debian 8 设置命令行界面的文本颜色

    平时我们操作的系统命令行界面文本默认黑底白字,有时候会看不惯这种全篇都是白色字符,这个时候可以通过改变PS1环境变量来改变文本颜色.我个人喜欢黑底绿字的搭配,以下是我个人的命令行界面样式: 注意:以下 ...