继承的基本使用
继承的特点
- 继承的顺序不可逆性:继承是从上往下依次继承,而不能逆序进行。
- 继承延续性:在继承顺序中,下一级具备上一级的属性和特征。
- 继承使用的必要性:代码复用,避免重复。一处更新,处处更新。
关于继承自己的理解
- 继承在我的经验上来看,继承是为了能减少重复,让子类通过继承父类的的方法亦或是属性,来让众多子类可以同时使用父类的公共部分,而可以同时拥有自身的特性。
- 子类和父类这一对名次也是形象的说明了,他们之间的关系,儿子继承了父亲的部分财产,通过多年的打拼,儿子也拥有之间的各类资产,这些资产是自己打拼得来,不从父亲那里继承, 其他兄弟姐妹,也并不享有自己资产的继承权,而父亲的资产,拥有继承权的都可以继承父亲的资产。
继承中的关键字
Protected关键字
- 通过使用protected关键字,可限制成员只允许子类访问,不允许其他非子类访问被修饰的成员。且子类只能在内部使用。
抽象类与抽象方法
public class Water()
{
public string name;
public string height;
public abstract void Drink(){}
}
public class water1():Water
{
public override Drink(){
Console.Write("1号水喝了");
}
}
public class water2():Water
{
public override Drink(){
Console.Write("2号水喝了");
}
}
List<Water> water=new List<Water> ();
当 water1、water2都继承自water时
water.add(water1);
water.add(water2);
//当使用foreach循环取出集合中的数据时
foreach(var item in water)
{
//如果直接取出water不进行判断后进行子类转换,无法获取子类中的成员,因为子类继承父类的成员,只能被子类访问。
//所以判断
if(item is water1)
water1.Drink();
else if(item is water2)
water2.Drink();
}
当一个集合拥有众多子类时,都需要如此转换,太过繁琐,这时抽象类就排上了用场。
当子类都实现父类的抽象方法时
在如上的场景中遍历取出对象执行方法时,将会识别出不同子类的方法(也就是重写后的抽象方法)
这一过程也淋漓尽致的体现了“多态”,解决了程序的拓展问题。
foreach(var item in water)
{
//此时不再需要进行判断
water2.Drink();
}
抽象类的定义与方法声明规范
- 一个抽象类中可以没有任何抽象方法,但当需要为一个类添加抽象方法时,这个类必须是抽象类。
抽象类的概念与使用要点
- 使用关键字abstract修饰的类,称为抽象类。
- 抽象类只是用来列举一个类的具有的行为,不能单独通过创建对象来使用,如Water water=new water.Func();是错误的
- 抽象类中可以有抽象方法,也可以没有任何抽象方法。
- 抽象类不能是静态的(static)的或密封的(sealed)。
抽象方法的概念与使用要点
- 在抽象类中使用abstract修饰的方法,称为抽象方法。
- 抽象方法必须在抽象类中定义,不能在普通类中使用。
- 抽象方法只是一个方法的声明,不能有任何方法体。
- 抽象方法仅仅表示一个应该具有的行为,具体实现由其子类实现。
- 抽象方法在子类中被实现(重写),必须使用关键字override。
- 子类必须重写父类的所有抽象方法,除非子类本身也是抽象类。
- 掌握C#面向对象中的三大特性之继承、多态。
- 掌握C#面向对象中的接口技术。
- 掌握大型项目开发中的三层架构设计方法。
- 掌握面向对象中的设计模式。
- 对面向对象编程完成总体性的认识和把握。