python和abap的关系_你真的会用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();

}

测试结果:

2b30f09a5f6782a749725abe890e6d95.png

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();

测试结果:

fa22da1327858a0849fb2d8e6ae89765.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值