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_public、ii_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_test和uo_test_inherited的构造器中加入代码。分别如下图:
在程序中创建一个uo_test_inherited对象实例后,我们运行程序,第一个出现的messagebox是
点击确定后,弹出来的是
继承类消息对话框。
那么,我们可以确定,在继承后的类中,父类的构造函数首先被调用,然后是第一级子类,然后是第二级子类,依次类推。
3.3. 析构顺序
对于析构器来说与构造器存在同样一个问题,就是当继承后,是子类的析构器首先被调用还是父类的析构器首先被调用呢?了解C++的人会马上回答,是子类的析构函数首先被调用,但是不同的语言可能具有不同的特性,还是亲手试验一下再下结论吧。
同样,我们在uo_test和uo_test_inherited类中的析构器中加入如下的代码:
运行程序,在依次完成uo_test和uo_test_inherited的构造函数后,关闭程序,我们发现,首先析构的是uo_test
然后是uo_test_inherited
析构顺序真的和C++不一样,竟然是先析构父类再析构子类。
在C++中,先析构子类再析构父类的原因是,父类是构成子类的基础,如果基础先不复存在了,那么子类来说还有什么意义呢?而在PB中先析构父类再析构子类又作何解释呢?开句玩笑话,父亲要比儿子先去世吧。
- PB面向对象编程研究(二)
- PB面向对象编程研究(一)
- PB面向对象编程研究(三)
- 面向对象编程(二)
- javascript面向对象编程(二)
- 第四课 面向对象编程(二)
- Javascript面向对象编程(二):继承
- JavaScript 面向对象编程 (二)
- Javascript面向对象编程(二):继承
- c#面向对象编程(二)
- Javascript面向对象编程(二)
- C++面向对象编程笔记(二)
- Objective C 面向对象编程(二)
- javascript面向对象编程(二)
- 第五章 面向对象编程(二)
- C++ Primer(面向对象编程 二)
- Python面向对象编程(二)
- java面向对象编程(二)
- Balloon.2.0 —— UI组件总览
- 欧拉路径,欧拉回路,并查集
- Ant任务
- 九度:1172<哈夫曼树WPL>
- python 编程之美
- PB面向对象编程研究(二)
- Ant编译中出现“includeantruntime was not set”警告
- 几种USB控制器类型:OHCI,UHCI,EHCI,xHCI
- myeclipse运行mapreduce报错:Cannot run program "cygpath": CreateProcess error=2,
- Servlet & Jsp 项目搭建问题汇总
- 剑指offer06题二叉树的重建(c语言)
- 2013腾讯实习笔试题
- 5个常用的Python功能代码
- Cocoa 框架 For iOS(一) 框架的介绍,Objectivie-C运行时能力的解析等