Object
万类之父,所有的类都集成于object
多态
概念
同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
表现形式
方法重载、虚方法、抽象方法、接口
虚方法(虚函数)
概念
1.如果实例方法声明中有 virtual 修饰符,可以将实例方法称为“虚方法”。
2.如果没有 virtual 修饰符,可以将实例方法称为“非虚方法”。
3.可以在派生类中重写父类虚方法,在派生类我们可以用 override 修饰符,
4.重写返回类型相同签名相同的且同名虚方法。
5.虚方法不能是私有的
关键字
virtual
在基类中我们可以通过virtual关键字声明一个虚方法
override
在派生类中我们可以通过override关键字重写签名相同的虚方法
sealed
在派生类中我们可以通过sealed封闭一个虚方法的重写
抽象方法(纯虚方法)
抽象方法就是没有实现代码的虚方法
抽象方法使用 abstract 修饰符进行声明,只能在同样声明了 abstract 的类中使用。
继承了抽象类的子类必须实现抽象类的所有抽象方法
用 abstract 修饰过的类是抽象类
抽象类无法被实例化
子类如果继承自抽象类,那么子类必须实现abstract类中所有的abstract成员
虚函数和纯虚函数的选择
如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑将父类定义成一个普通类,用虚方法来实现多态。
如果父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义为抽象类。
重写ToString
当我们直接输出一个对象名,实际上是在调用对象的ToString方法
我们经常会在自定义类型中重写它,以便输出我们需要的数据
任何类都可以重写ToString方法
接口
定义
接口定义了可由类和结构实现的协定。
接口可以包含方法、属性、事件和索引器。不包含字段
接口不提供所定义的成员的实现代码,仅指定必须由实现接口的类或结构提供的成员.
接口是多重继承的,一个接口可以继承另一个接口或者多个接口,一个类可以继承一个或者多个接口。
接口的声明与类基本一致
接口的方法和属性均不允许实现
接口不能有构造,不能有字段不能重载运算符
接口中成员必须为Public
接口可以继承接口,但不能继承类
优势
多继承,可以让类更灵活,并在减少代码重复的情况下降低代码关联性(耦合)
多态:程序可扩展性,节约成本,提高效率
两个不同类型的物体,具有相同行为,考虑使用接口