java 引用父类 数据库,PL/SQL小技巧一个:在子类中怎么调用父类被重载的方法-数据库专栏,SQL Server...

本文介绍了在Oracle9i Release 2中如何模拟实现类似C++和Java中的继承和重载方法。通过创建对象类型并定义成员方法,展示了如何在子类中调用父类的被重载方法,尽管Oracle9i本身不直接支持super关键字。通过示例代码,演示了如何使用self调用来实现这一目标,并提供了测试案例验证了其工作原理。
摘要由CSDN通过智能技术生成

在c++和java中,这是非常容易实现的

c++是:父类名::被重载的方法(参数表), 比如:

ancestorclass::name({arguments});

而在java中,可以用super代替父类,如这样实现

super.name({arguments});

而在oracle 9i release2中都没实现这样的功能,

当然我们可以用其它办法来实现这样的功能。

父类对象类型

create or replace type parent as object (

rowsid integer,

member procedure printattr,

final member procedure printattr_parent    –最好加final,防止子类对此方法进行重载

)not final;

/

create or replace type body parent is

member procedure printattr is

begin

printattr_parent;

end;

final member procedure printattr_parent is

begin

super.printattr;  –此句是错地,会抛出identifier ‘super.printattr’ must be declared. 因此要删除此句。

dbms_output.put_line(‘父类方法,rowsid:=’||rowsid);

end;

end;

/

子类对象类型

create or replace type child under parent (

overriding member procedure printattr

)not final;

/

create or replace type body child is

overriding member procedure printattr is

begin

dbms_output.put_line(‘子类过程—调用父类过程之前’);

–在此处我们要用self.printattr,因为printattr不是直接在子类中定义的过程

self.printattr;

dbms_output.put_line(‘子类过程—调用父类过程之后’);

end;

end;

/

然后我们进行测试一下:

declare

vparent parent := parent(1);

vchild child := child(11);

begin

dbms_output.put_line(‘运行父类过程‘);

vparent.printattr;

dbms_output.put_line(‘运行子类过程‘);

vchild.printattr;

end;

运行结果:

运行父类过程

父类方法,rowsid:=1

运行子类过程

子类过程—调用父类过程之前

父类方法,rowsid:=11

子类过程—调用父类过程之后

虽说这有点儿麻烦,父类有几个被重载的方法,你就要在父类父加几个另外的方法。

但也是没办法的办法,’曲线救国’嘛。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值