Object与封装、继承和多态性

Object与封装、继承和多态性编程

  在面向对象编程思想中,不管是C++,Java仍是C#等,封装、继承与多态性都有着无与伦比的地位,深刻理解并掌握它们是必不可少的。而我将使用C#来浅谈继承与多态性。函数

1.封装:学习

  封装就是把里面实现的细节包起来,这样很复杂的逻辑通过包装以后给别人使用就很方便,别人不须要了解里面是如何实现的,只要传入所须要的参数就能够获得想要的结果。封装很好理解,像咱们常见的函数,就是一种封装。还有
类将一些函数一数据封装。类是比函数更高级的一种封装方法。

2.继承:spa

  新类(即派生类)经过继承将获取基类的全部非私有数据和行为以及新类为本身定义的全部其余数据或行为。所以,新类具备两个有效类型:新类的类型和它继承的类的类型。指针

public class A { public A() { } } public class B : A  // B 直接继承自 A { public B() { } }

 

  

  从上面的代码与图形可与看出B直接继承自A,那么B就拥有了A的除了私有数据与行为外的全部部分,但在为B分配内存时,却包涵了A的部分,那么在B的内存中也包含A的私有数据和行为的部分,那么又为何说B没有这部分呢?要解决code

这个问题就要先理解类的结构:类本身的全部成员对本身都是可见(可访问)的,但类的实例只能够访问它的公有(public)成员,以下:对象

public class A { private int temp; protected int temp2; public int temp3; } public class B : A { public int temp4; }

此时,B的可见成员有 temp2,temp3,temp4 ,因为 temp 是 A 的私有成员,因此在继承时不包含它。但在 B 的内存里确实有一块是用来存放A的,而在存放 A 的部分里又有一部分存储 temp ,因此在B的存储空间里也存放着 temp 这个量。blog

只不过类 B没法直接访问temp,若是说B继承了A的temp,那么B就应该能够直接访问temp,但实际上并不能直接访问,因此说咱们说:在继承时,子类确实包含了父类的全部部分,但子类本身所能访问的只有父类的非私有部分和本身新定义继承

的部分,即实际继承时,只从父类继承了其非私有部分。接口

 

3.多态性:

  多态按字面的意思就是“多种状态”。引用Charlie Calverts对多态的描述——多态性是容许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值以后,父对象就能够根据当前赋值给它的子对象的特性以不一样的方式运做(摘自“Delphi4 编程技术内幕”)简单的说,就是一句话:容许将子类类型的指针(或引用)赋值给父类类型的指针(或引用)。

  从上图看出,“汽车”,“小轿车”,“马车”等都继承自“车”,但他们除了公有的“车”这个属性外,都不相同。一组类,它们都继承自同一个类,但各自拥有的新的不一样的属性,使得它们都不相同,呈现出多种状态的现象,就是所谓的多态。

 

4.object类:

  在C#(与Java)中,全部的类都直接或间接的继承自 object 类,即 object 是全部类的基类。在咱们定义类是,若是不显示指明基类,在编译时,编译器都会默认为继承自 object 类。为何要这样作呢?固然是为了充分的体现

和利用面向对象思想的优势--即多态性的利用。

  在学习C#时你也许会忽略一个重要的知识点: 向上转型和向下转型

 

class A { pubic void A_Text() { Console.WriteLine("I'm A!"); } } class B { public void B_Text() { Console.WriteLine("I'm B!"); } } void Sample(object obj) { if(obj is A) { A a=(A)obj;    //向下转型
 a.A_Text(); } else if(obj is B) { B b=(B)obj;    //向下转型
 b.B_Text(); } } A a=new A(); B b=new B(); Sample(a) //向上转型
Sample(b)     //向上转型

 

  能够看出,经过向上与向下转型使得咱们在遇到相似于上面(经过另外一个函数来调用一个对象的成员)的状况时,不须要根据参数类型写多个重载函数,实现了代码的简化,可读性更强。还有接口的实现也是经过多态来实现的,可见,使用多态的好处有不少,

只不过要真正体会其好处和掌握多态,须要大量的实践!!!

  object 类充分用到了前面讲的封装、继承与多态,并将它们的做用发挥到了极致,学会使用 object 是咱们学习和使用C#不可或缺的部分。在这里只是简单提了一下 object ,若是真正的深刻讲 object 类可能将是长篇大论,若是之后有时

间可能会专门研究一下 object 的成员与使用。

相关文章
相关标签/搜索