继承小结与抽象类
继承的特征:
①子类拥有父类的所有信息和方法(除构造方法外)
②子类只能访问父类用public和protected修饰的属性和方法
③单继承
④用sealed修饰的类不能被继承
⑤子类调用父类的参数的构造方法时必须用base,子类构造方法可以不带参数
⑥子类重写父类方法时,父类同名方法用virtual修饰,子类同名方法用override修饰
⑦子类方法访问父类同名方法时用base
⑧创建子类对象时,先调用父类的构造方法,然后在调用子类的构造方法
抽象类
在C#中使用关键字 abstract 来定义抽象类和抽象方法
不能初始化的类被叫做抽象类,它们只提供部分实现,但是另一个类可以继承它并且能创建它们的实例。
使用abstract 在一个类声明中表示该类倾向要作为其它类的基类成员被标示成abstract,或被包含进一个抽象类,必须被其派生类实现。
通过在类定义前面放置关键字 abstract,可以将类声明为抽象类
PS: public abstract class A
{
public abstract void print(int i);
}
如果将 virtual 方法声明为 abstract,则该方法对于从抽象类继承的所有类而言仍然是虚方法。 继承一个抽象方法的类不能访问该方法的原始实现
一个抽象类可以包含抽象和非抽象方法,当一个类继承于抽象类,那么这个派生类必须实现所有的的基类抽象方法。
通过声明派生类也为抽象,我们可以避免所有或特定的虚方法的实现,这就是抽象类的部分实现。
abstract class MyAbs{
public abstract void AbMethod1();
public abstract void AbMethod2();
}
//not necessary to implement all abstract methods
//partial implementation is possible
abstract class MyClass1 : MyAbs
{
public override void AbMethod1()
{
Console.WriteLine("Abstarct method 1");
}
}
class MyClass : MyClass1
{
public override void AbMethod2()
{
Console.WriteLine("Abstarct method 2");
}
}
class MyClient
{
public static void Main()
{
MyClass mc = new MyClass();
mc.AbMethod1();
mc.AbMethod2();
}
}
抽象方法有以下特征:
1.一个抽象方法可以看作是一个虚函数。
2.抽象方法的声明只能在抽象类中。
3.因为抽象方法声明只提供一个无实现的方式,没有方法体
4.方法体的实现被覆写方法提供,覆写方法是一个非抽象类的成员。
5.抽象属性的行为和抽象方法相像,除了不同的声明形式。
6.在一个静态属性中使用abstract 是一个错误。
*一个抽象属性能够通过派生类使用 override 实现.