在C#中的继承符合下列规则:
继承是可传递的。如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员。Object类作为所有类的基类。
派生类应当是对基类的扩展。派生类可以添加新的成员,但不能除去已经继承的成员的定义。
构造函数和析构函数不能被继承。除此以外的其它成员,不论对它们定义了怎样的访问方式,都能被继承。基类中成员的访问方式只能决定派生类能否访问它们。
派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖已继承的成员。但这并不因为这派生类删除了这些成员,只是不能再访问这些成员。
类可以定义虚方法、虚属性以及虚索引指示器,它的派生类能够重载这些成员,从而实现类可以展示出多态性。
1.覆盖
在类的成员声明中,可以声明与继承而来的成员同名的成员。
2.多态(Polymorphism)
在面向对象的系统中,多态性是一个非常重要的概念,它允许客户对一个对象进行 *** 作,由对象来完一系列的动作,具体实现哪个动作,如何实现由系统负责解释。
在C#中,多态性是指同一 *** 作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。C#支持两种类型的多态性:
编译时的多态性
编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数,返回的类型等信息决定实现何种 *** 作。
运行时的多态性
运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种 *** 作。C#中,运行时的多态性通过虚成员实现。
编译时的多态提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。
C语言的数组有动态数组和静态数组两种。
1 静态数组。
对于静态数组,无法新增加数组成员数量。
所以一定要最初始定义足够大的数组,然后可以用一个整型变量维护数组中现有成员个数,再动态增加实际成员个数。
比如
int a[1000]int n = 0
while(scanf("%d",&a[n]) != EOF) n ++
这样的代码就可以实现增加数组成员数的类似效果。n为实际成员个数。
2 动态数组。
动态数组是可以随时改变数组成员个数的。不过为了确定当前数组个数,需要用两个整型变量来保存最大成员数,和已有成员数,这样就可以在不够的时候进行扩大。
int n = 0, size = 100 //n为当前元素个数,size为数组大小,初始为100.int *a = NULL//数组指针。
a = (int *)malloc(sizeof(int) * size) // 初始分配100个元素。
while(scanf("%d",&a[n]) != EOF)
{
n++
if(n >= size)//空间不足。
{
size+=100//增加100个元素空间。
a = (int *)realloc(sizeof(int)*size, a)//重新分配空间。
}
}
子类,在面向对象开发中代表一个重要的思想——继承。
继承,一个对象直接使用另一对象的属性和方法。即子类可以使用父类存在的处理。
从宏观的角度来看,继承是多态的基础,是面向对象开发的重要组成。
从局部的角度来看,继承可以节省代码开支,提高内聚,优化代码的可维护性。
创建子类的方法如下:
// 单继承class <派生类名>:<继承方式><基类名>
{
<派生类新定义成员>
}
// 多重继承
class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
{
<派生类新定义成员>
}
<继承方式>存在三种:公有继承(public)、私有继承(private)、保护继承(protected)
1. 公有继承(public)
公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的。
2. 私有继承(private)
私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。
3. 保护继承(protected)
上面部分内容引用自百度百科<继承性>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)