• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

PL/SQL小技巧一个:在子类中怎么调用父类被重载的方法

发布: 2007-7-02 11:08 | 作者: admin | 来源: | 查看: 10次 | 进入软件测试论坛讨论

领测软件测试网
在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
子类过程---调用父类过程之后


虽说这有点儿麻烦,父类有几个被重载的方法,你就要在父类父加几个另外的方法。
但也是没办法的办法,’曲线救国’嘛。

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网