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)、重写与虚方法调用


父类是虚 ,子类是覆盖。

  面向对象语言拥有的“虚方法调用”特性,使我们可以值用同样的一个语句,在运行是根据对象类型而执行不同的操作。

posted @ 2015-12-27 11:23  苍穹丶  阅读(1032)  评论(0编辑  收藏  举报