书上写着是规范派生类的属性和方法??其实我没看懂是什么意思?意思是接口是成员变量然后抽象类是方法在派生类当中??
他给了一个例子去理解
定义一个汽车的接口,然后在接口中只定义了开车的方法,但是发动机如何启动没有实现(???啥玩意),而是在派生类中实现了开车的方法。
我的理解就是在接口的界面定义方法,然后定义一个派生类继承自接口,在这个派生类中实现在接口中定义的方法,有三点需要注意,
1 在接口中定义的方法只需要返回类型和方法名
2 在派生类中的方法需要修饰词和返回类型和方法名
3 在调用派生类的方法时,如果方法中带有参数,那么调用的时候也需要带有参数
接口之间也可以互相继承,但是要是需要派生类来实现两个接口所定义的方法
有一个很有意思的一点是,类不能同时继承两个基类,但是通过接口,类可以同时继承两个以上的接口,也可以在继承基类的同时再继承一个接口,实现多重继承关系:
接口的多重继承和类的多重继承
接口的继承意思是类继承两个接口,接口之间使用逗号分隔(一个接口继承两个接口,两个接口之间使用逗号分隔,然后派生类继承自第一个接口),????但我有一个问题就是派生类可不可以同时继承两个接口,然后在接口处使用逗号分隔???
类的多重继承意思是就是一个派生类可以同时继承一个类和一个接口,类和接口之间使用逗号分隔,在派生类中可以有自己的方法然后可以在自己的方法里调用基类的方法,然后在实现接口中的方法。
然后就到抽象类了 书中讲的很明确抽象类是介于接口和类之间的一种特殊的类,抽象类使用abstract关键字标识,抽象类中也定义了一些需要在派生类中实现的方法称为抽象方法使用abstract来标识,但是我发现在抽象类中抽象方法的前面有public关键字很神奇了??我有点蒙了 。。。
派生类可以继承抽象类,很大的不同点在于在实现抽象类中的方法时,要在public等之后加上override来重写这个方法,abstract相当于virtual
抽象类之间的继承关系因为只给了一段代码,没有详尽的说明因此我只能凭这一段代码来讲讲我学到的东西
抽象类继承抽象类在子抽象类中不用实现父抽象类中的方法,并且可以实现自己的方法而不用定义在派生类中实现,然后派生类继承子抽象类,然后在派生类中实现父抽闲类中的方法,最让我困惑的一点就是,在main函数中当实例化派生类的时候,调用子抽象类的方法时是直接调用的,rect.FillColor();但是我们在派生类中并没有关于子抽象类中方法的声明,只是在一开始的时候继承了子抽象类。很是神奇~我刚才试了一下可以在子抽象类中定义一个方法,然后在派生类中实现,也是可以运行的出来的。
抽象类和接口之间也可以实现继承关系,书上明确的写出在抽象类继承接口的时候,可以实现接口中定义的方法,也可以不实现写成抽象方法
从这里可以看出抽象类当作为派生的时候很随意,可以实现他继承的方法也可以写成抽象类然后在派生类中实现
abstract class EPay
{
public abstract void Process();
}
class PayPal : EPay
{
public override void Process()
{
//处理paypal业务
}
}
class AliPay : EPay
{
public override void Process()
{
//处理支付宝业务
}
}
class EPayFactory
{
public EPay CreatEPay(string epayType)
{
EPay ePay = null;
switch (epayType)
{
case "PayPal":
ePay=new PayPal();
break;
case "AliPay":
ePay=new AliPay();
break;
default:
break;
}
return ePay;
}
}
static void Main(string[] args)
{
EPayFactory ePayFactory=new EPayFactory();
EPay ePay = ePayFactory.CreatEPay(“PayPal”);
ePay.Process();
ePay = ePayFactory.CreatEPay(“AliPay”);
ePay.Process();
}