返回介绍

11.13 过载成员

发布于 2020-09-09 22:55:49 字数 782 浏览 1110 评论 0 收藏 0

子类对象也是它们的父类对象的有效表示。例如,每一个LinkPacket对象都是一个完全合法的Packet对象。

一个LinkedPacket对象的句柄可以赋值到一个Packet变量:

LinkedPacket lp = new;
Packet p = lp;

在这种情况下,对p的引用访问Packet类的方法和类属性。因此,例如,如果LinkPacket中的类属性和方法被过载,那么通过p引用这些过载的成员会获得Packet类中的原始成员。从p的角度看,LinkedPacket中的new和所有过载的成员都被隐藏了。

class Packet;
    integer i = 1;

    function integer get();
        get = i;
    endfunction
endclass

class LinkedPacket extends Packet;
    integer i = 2;

    function integer get();
        get = -i;
    endfunction
endclass

LinkedPacket lp = new;

Packet p = lp;

j = p.i;     // j=1,而不是2

j = p.get(); // j=1,不是-1或–2

为了通过一个父类对象(在本例中为p)调用被过载的方法,这个方法需要使用vitual声明(参见11.19节)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文