C#面向对象--继承
1、继承
继承:类与类之间可以具有继承关系,一个类只能继承一个父类,但可以被好多类继承
构成继承关系的两个类中:父类或基类;子类。
父类与子类的基本特性:
是一种(IS_A)关系:子类是父类的一种特例。
扩充(Extends)关系:子类拥有父类所没有的功能。
2、类成员的访问特权
公有 public 访问不受限制
私有 private 只有类自身成员可以访问
保护 protected 子类可以访问,其他类无法访问
(1)、public和private
主要用于定义单个类的成员存取权限
(2)、protected
当一个类成员被定义为protected之后,所有外界类不可以访问它,但其子类可以访问。
当创建子类对象后,外界可以访问子类的所有成员和父类公有成员。
继承条件下的类成员访问权限:
所有不必让外人知道的东西都是私有的。
所有需要向外提供的服务都是公有的。
所有的“祖传绝招”,“密不外传”的都是保护的。
(3)、internal
只局限于同一个程序集内部
internal是C#的默认可访问性,这就是说,如果某个类没有任何可访问性关键字在它前面
,则它就是internal的。
3、子类父类变量的互相赋值
*引用类型与值类型的区别
总结:
一共三部分:子类继承父类;子类转换成父类类型;父类转换成子类
继承:类与类之间的关系:父子关系
子类继承父类,一个类只能继承一个父类
当子类继承父类之后就拥有了父类的公共属性和方法
子类对象可以直接转换为父类类型,但父类对象不能直接转换为子类类型,当某个父类对象 是通过子类对象转换来的时候,通过父类类型不能点出来子类的属性和方法。
只有当从某个子类对象转换来的父类对象,才能再转换回去
对象的等号赋值,实际赋值的是指向
Class1 c = new Class1();
Class1 d = c; 那么d和c是一个东西。
子类对象可以被当成基类对象使用
如果确信父类变量中所引用的对象的确是子类类型,则可以通过类型强制转换进行赋值:
子类对象变量=(子类名称)基类对象变量;
或使用as运算符
子类对象变量=基类对象变量 as 子类名称
4、方法重载、隐藏与虚方法调用
扩充:子类方法,父类没有;
重载:子类有父类的同名函数,但参数类型或数目不一样;
完全相同:子类方法与父类方法从方法名称到参数类型完全一样。
(1)重载(overlord)
同名函数,参数类型不同
父类 子类
同名函数,参数类型相同
类型转换
总结:
当子类继承父类的时候,父类中的与子类同名不同参数的的方法,可与子类方法构成重载关系
父类只能读自己的方法,不能调用子类的。
父类有一个和子类同名参数的方法的时候,通过父类类型对象调的是父类的方法
通过子类类型调用的是子类的方法
(2)、隐藏
(3)、重写与虚方法调用
父类是虚 ,子类是覆盖。
面向对象语言拥有的“虚方法调用”特性,使我们可以值用同样的一个语句,在运行是根据对象类型而执行不同的操作。