C#面向对象总结(1)

隐藏方法:我们不能删除基类中的任何成员,但是可以用与基类成员名称相同的成员来屏蔽基类成员

    屏蔽数据成员:在派生类中声明名称和类型相同的成员

    屏蔽函数成员:在派生类中声明新的带有相同函数签名的成员

    让编译器知道:可以添加new关键字,否则会警告

C#面向对象总结(1)

虚方法与多态:

    一个设计原则:面向对象编程中,都要遵循一个原则:依赖倒置原则。

    换句话说就是程序设计要依赖抽象类(Pet),而不依赖于具体类。

    基类的引用:派生类的对象包含基类和派生类部分。所以我们可以通过一个基类类型的应用指向派生类。通过指向派生类的基类引用。我们仅仅能访问派生类中的基类部分。

    调用隐藏类型的新的方法,还是原来基类的方法取决于我通过什么类型的引用。

    统一提高效率:有时我们需要一个容器(比如数组)保存所有的基类(Pet),基类描述了共同的属性和行为。 比如宠物需要年龄,名字,都可以发出声音,进食。

    这样方便管理,容易扩展。

    前提是基类的引用可以指向派生类。

    子类具有差异:

    但是,基类不能涵盖所有情况和变化。统一的行为方法,往往在基类和派生类中有所区别。虽然所有的宠物都能发出声音,但是发出的声音各不相同,有些发不出声音。

    虚方法:声明为Virtual的方法就是虚方法。基类的虚方法可以再派生类中用Override进行重写

    多态:通过指向派生类的基类引用,调用虚方法,会根据引用所指的派生类的实际类型,调用派生类的同名重写函数,就是多态。

C#面向对象总结(1)

C#面向对象总结(1)

我们可以正常调用或者用数组方法

C#面向对象总结(1)

构造函数:

    在派生类对象中,有一部分是基类部分,在执行派生类的构造函数中,在执行派生类构造函数之前,将会隐式或者显示的调用基类调用函数。

    C#面向对象总结(1)

C#面向对象总结(1)

C#面向对象总结(1)

抽象方法和抽象类:

    抽象方法:C#面向对象总结(1)

声明方法是abstract是不能有实体的,不能有实际的函数体,只可以在派生类中进行重写(override)

但是用虚方法,可以有函数体

基类有abstract方法,必须重写 abstract比虚更虚,虚无缥缈,没有函数体必须重写

没有函数体,你这个方法并不存在

C#面向对象总结(1)

C#面向对象总结(1)

如果一个类含有抽象方法,这个类就是抽象类

抽象就像一块生牛排 适合各种做法 ,能做出不同味道,但牛排不能什么都不做生着吃

C#面向对象总结(1)

如果一个类有抽象方法,必须声明抽象类

如果只有普通方法,可以声明也可以不声明

派生出来的必须override否则还是抽象类

C#面向对象总结(1)

密闭类:

C#面向对象总结(1)

C#面向对象总结(1)

C#面向对象总结(1)

C#面向对象总结(1)

这里为了防止,狗再不汪汪叫,就禁止派生

接口:

    C#面向对象总结(1)

一般用I开头就是接口的首字母

它是一种应用类型,而不是值类型

C#面向对象总结(1)


C#面向对象总结(1)

C#面向对象总结(1)

结构和类:

    C#面向对象总结(1)

C#面向对象总结(1)

类的静态成员:

C#面向对象总结(1)

C#面向对象总结(1)

C#面向对象总结(1)

C#面向对象总结(1)

C#面向对象总结(1)

C#面向对象总结(1)

因为你的实例可能压根没被new出来

C#面向对象总结(1)


C#面向对象总结(1)

C#面向对象总结(1)

C#面向对象总结(1)

C#面向对象总结(1)

C#面向对象总结(1)

C#面向对象总结(1)


C#面向对象总结(1)

扩展就是喂食的方法,把Dog对象传进来调用静态类的静态方法

C#面向对象总结(1)

C#面向对象总结(1)

C#面向对象总结(1)