PL/SQL小技巧一个:在子类中怎么调用父类被重载的方法
2005-01-19 21:22
681 查看
在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
子类过程---调用父类过程之后
虽说这有点儿麻烦,父类有几个被重载的方法,你就要在父类父加几个另外的方法。
但也是没办法的办法,’曲线救国’嘛。
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
子类过程---调用父类过程之后
虽说这有点儿麻烦,父类有几个被重载的方法,你就要在父类父加几个另外的方法。
但也是没办法的办法,’曲线救国’嘛。
相关文章推荐
- PL/SQL小技巧一个:在子类中怎么调用父类被重载的方法
- Odoo(OpenERP) 多个子类重载同一个父类方法的执行顺序及如何调用父类的父类方法
- new 一个没有定义构造方法的子类对象,会调用父类的默认构造方法
- 所有的页面都继承自定义的BasePage,而有一个特殊页面要继承BasePage,但不想执行父类构造函数调用的某些方法,怎么办?
- 关于C++中子类调用父类方法的一个问题
- 子类与父类之间的方法重载、隐藏、重写与虚方法调用
- java 通过子类怎么调用父类已经被重写的方法
- 关于子类继承父类,父类调用被子类重载的方法是输出什么
- 父类的正常成员函数子类可以使用,并不是继承下来 的,子类是怎么调用父类的函数 : 可能是利用了一种叫函数名联编的方法.没有隐藏的情况下用函数名字来决定调用的函数.
- Q:怎么才能够让子类强制调用父类的方法
- Java编程中在子类重载方法中调用父类中该方法时,该方法包含递归时出现的调用错误
- java创建一个子类对象是会调用父类的构造方法会不会创建父类
- 关于C++中子类调用父类方法的一个问题
- java程序练习:尝试创建一个父类,在父类中创建两个方法,在子类中覆盖第二个方法,为子类创建一个对象,将他向上转型到基类并调用这个方法。
- 2018/01/08JAVA 基础 / 接口与继承:[Q]:若父类Hero提供了一个有参的构造方法,但是没有提供无参的构造方法。子类应该怎么处理?
- 尝试创建一个父类,在父类中创建两个方法,在子类中覆盖第二个方法,为子类创建一个对象,将它向上转型到基类并调用这个方法。
- 一个子类要调用父类的方法时,默认是使用this还是super?
- java中如何让一个子类不能调用从父类继承的方法
- java创建一个子类对象是会调用父类的构造方法会不会创建父类
- java方法重写的时候,一个调用父类还是子类方法的问题