PB面向对象编程研究(二)

来源:互联网 发布:知图科技 编辑:程序博客网 时间:2024/06/06 04:19

3. 继承性

继承性是面向对象编程的一个重要特性。它包括属性的继承和方法的继承。在PB中,不支持多重继承,即,一个类的父类只能有一个。

3.1. 类的继承

点击菜单“inherit…”可以打开继承窗口。接着第二章中的范例内容,我们继承创建一个类“uo_test_inherited”,如下图。

 

点击OK按钮,保存对象为“uo_test_inherited”。

3.1.1. 属性的继承

在“封装性”一章的2.2.3节,已经看到了属性的继承。即,在uo_test的子类uo_test_inherited中可以访问属性ii_publicii_protected,但是不能访问ii_private

3.1.2. 方法的继承

创建一个uo_test_inherited对象,测试一下方法的继承。由于我们在2.3.3节中已经创建了一个方法func,在uo_test_inherited对象中应该通过继承已经拥有了这个函数。在窗口的Open事件中加入如下代码,在close事件中加入destroy iu_test_inherited代码。

 

运行程序,我们可以证实,在uo_test类中声明的方法调用成功了,如下图。

 

3.2. 构造顺序

子类和父类都有构造器,那么当子类在构造的时候,父类的构造器会被调用吗?如果被调用是先调用子类的构造器还是先调用父类的构造器呢?为了解答这个问题,我们分别在uo_testuo_test_inherited的构造器中加入代码。分别如下图:

 

 

在程序中创建一个uo_test_inherited对象实例后,我们运行程序,第一个出现的messagebox

 

点击确定后,弹出来的是

 

继承类消息对话框。

那么,我们可以确定,在继承后的类中,父类的构造函数首先被调用,然后是第一级子类,然后是第二级子类,依次类推。

3.3. 析构顺序

对于析构器来说与构造器存在同样一个问题,就是当继承后,是子类的析构器首先被调用还是父类的析构器首先被调用呢?了解C++的人会马上回答,是子类的析构函数首先被调用,但是不同的语言可能具有不同的特性,还是亲手试验一下再下结论吧。

同样,我们在uo_testuo_test_inherited类中的析构器中加入如下的代码:

 

 

运行程序,在依次完成uo_testuo_test_inherited的构造函数后,关闭程序,我们发现,首先析构的是uo_test

 

然后是uo_test_inherited

 

析构顺序真的和C++不一样,竟然是先析构父类再析构子类。

C++中,先析构子类再析构父类的原因是,父类是构成子类的基础,如果基础先不复存在了,那么子类来说还有什么意义呢?而在PB中先析构父类再析构子类又作何解释呢?开句玩笑话,父亲要比儿子先去世吧。

0 0