接口和抽象类是面向对象设计中最精妙最关键的部分。
学编程的重点:不是学,而是用。
抽象类:
函数成员没有被完全实现的类。(没有函数体。)
abstract class Student
{
//只有返回值、函数名和参数列表,没有方法体。完全没有被实现的方法,也就是抽象方法。
public abstract void Study();
// 一个类一旦有了抽象方法或者其他抽象成员,这个类就是抽象类。
}
abstract成员不能是private。
因为抽象类的子类去实现抽象类的方法,如果子类都没法访问,就更没法实现了,所以abstract成员不能是private。
编译器不允许实例化一个抽象类。
抽象类核心概念:因为抽象类含有未被实现的函数成员。
如果不能实例化这个抽象类,那么抽象类的功能:抽象类是专门为做基类而生的。
- 作为基类,派生其他子类。在派生类中把没有实现的函数成员,通过override重写实现了。
- 抽象类作为基类,可以用来声明变量。用基类类型的变量去引用子类类型的实例。
抽象类唯一能做的事是专门为做基类而生的。
开闭原则:
我们应该封装一些固定,不变的,稳定的、确定的成员;把不确定的,有可能改变的成员抽象为抽象成员、抽象类,留给子类去实现。
抽象类和开闭原则天生就是一对。
演化过程:抽象类和接口怎么来的?
第一步:初始化与复制
我买了一辆车Car,这车能跑Run能停Stop。后来我又买了一辆卡车Truck,卡车也可以跑和停。直接把方法粘贴过去,把Car改为Truck。代码如下:
class Car
{
public void Run()
{
Console.WriteLine("Car is running...");
}
public void Stop()
{
Console.WriteLine("Stopped");
}
}
class Truck
{

本文详细探讨了抽象类和接口在编程中的关键作用,解释了如何通过抽象方法和虚方法实现开闭原则,以及它们在继承和多态中的应用。从初始化复制到抽象类的出现,再到接口的引入,逐步揭示了这两种设计模式的进化过程和实际用途。
最低0.47元/天 解锁文章
429

被折叠的 条评论
为什么被折叠?



