国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

PL/SQL小技巧一個:在子類中怎么調用父類被重載的方法

2024-07-21 02:06:01
字體:
來源:轉載
供稿:網友
國內最大的酷站演示中心!

在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
子類過程---調用父類過程之后


雖說這有點兒麻煩,父類有幾個被重載的方法,你就要在父類父加幾個另外的方法。
但也是沒辦法的辦法,’曲線救國’嘛。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 双辽市| 聊城市| 伊川县| 伊金霍洛旗| 德惠市| 伽师县| 周宁县| 和田县| 根河市| 江永县| 拉孜县| 化州市| 安顺市| 资阳市| 邢台县| 克拉玛依市| 永康市| 海阳市| 修水县| 阿克陶县| 昭觉县| 额尔古纳市| 平南县| 如东县| 蒙自县| 霍山县| 曲松县| 融水| 云梦县| 江孜县| 馆陶县| 苍南县| 湘潭县| 边坝县| 大荔县| 江孜县| 彰武县| 阿勒泰市| 娄底市| 平山县| 宁陵县|