普通类可以定义普通方法(定义普通方法必须同时声明和方法体),虚方法(定义虚方法必须同时声明和方法体)
---------普通派生类不可以重写它的普通方法,
---------普通派生类可以重写或者不重写虚方法,
---------抽象派生类不可以重写它的普通方法,
---------抽象派生类可以重或者不重写虚方法,
抽象类可以定义普通方法(定义普通方法必须同时声明和方法体),虚方法(定义虚方法必须同时声明和方法体),抽象方法(定义抽象方法只能声明)
---------普通派生类不可以重写它的普通方法,
---------普通派生类可以重写或者不重写虚方法,
---------普通派生类必须实现抽象方法,
---------抽象派生类不可以重写它的普通方法,
---------抽象派生类可以重写或者不重写虚方法,
---------抽象派生类可能实现或者不实现抽象方法
接口只能声明方法(类似于抽象类的抽象方法)
---------普通类继承接口,必须全部实现方法,
---------抽象类继承接口,可以选择完全实现方法,或者选择实现声明部分(必须以抽象方式定义声明部分)
class Program
{
static void Main(string[] args)
{
CarA c = new CarA("丰田", "AX001");
c.SetLunZi();
c.SetColor();
CarB c1 = new CarB("上汽", "SQ001");
c1.SetLunZi();
c1.SetColor();
c1.SetXingCheJiLuYi();
CarC c2 = new CarC("大众", "DZ001");
c2.SetLunZi();
c2.SetColor();
}
}
//-----大众一定是安装钛合金轮子,喷颜色是喷黑色
//-----丰田一定是安装钛合金轮子,喷颜色是按照型号的
//-----上汽根据型号来安装什么样材料的轮子,喷颜色按照型号来,免费送行车记录仪
//-----一开始定义了一个Car来实现,里面有很多if。。。else;
//-----后来根据不同的车,分开3个类来实现;
//-----再后来多定义一个抽象类,把前面3个类的共同点抽出来。
//-----抽象类是的其他一些同类型的类的一些公共点的集合,像是兄弟间的共同点,
//-----如果定义成普通类,就变成Car是CarC的父亲,
//-----而按照前面的操作,明显是兄弟类的共同点比较合理
//-----至于为什么不定义成接口,抽象类也可以定义跟接口的一样的方法,
//还有普通方法,虚方法,这些是接口没有的,派生类如果不想重写,就可以用抽象类现有的方法