.Net 中的面向对象 继承
继承思想的应用是为了解决封装遗留下来的代码冗余的问题。但这是简单的理解。
在一个系统开发中会有重复的成员,所以找到这些共有的成员,把它们装进一个类中,即父类。
语法 A:B
A类继承了B,B 是父类。
A类可访问B类中的非私有成员。
继承的特点
1,继承具有传递性
2,单根性,一个类只能拥有一个父类。
3,里氏替换原则,不可违反主观逻辑,即使代码没错。
深入理解继承带来的好处。
1,父类可以实例化子类对象。
//Person和teacher类,student类
Person t = new teacher();
父类类型的数组就可以容纳所有子类对象。
Person[] p = new Person[2]; p[0] = new teacher(); p[1] = new student(); //超级容器中的所有子类对象都会被识别为父类类型
。
2,父类可以成为一个超级容器,可以容纳所有子类对象。并通过 is 判断,as 来给父子类型转换。
for (int i = 0 ; i<p.Length;i++)
{if (p[i] is teacher)(p[i] as teacher).成员;//用来访问子类里的成员。
}
is 和 as
用来给自定义数据类型用。变量.GetType().Name;//得到普通变量的类型。
!!!要想访问超级容器中的子类对象必须 要is 判断,as 转型。又称为 拆箱 和 装箱。十分小号内存,更高级的
访问方式再学,这也是继承的缺点之一。因为超级容器中的所有子类对象都会被识别为父类类型。
继承中的构造函数
.net中,默认子类不能继承父类的构造函数,但可调用父类的构造函数。
语法
public student (string grade,int age,string name):base (age, name)//base 只可表示父类的字段。
{this.grade = grade ;//this 可指本类,也可指父类。//age 和 name 也可在父类中初始化。this.age = age;this.name = name;
}
//而且,参数名前后一致。
//为了减少子类本身初始化字段的代码。
继承中的重写
就是在子类写一个方法与父类中的方法一样的代码。
这会优先显示子类的方法,这叫 【默认重写】。
提高程序的扩展性。
sealed 密封类,不能被继承。