virtual等具有具体实现的关键字。
2、抽象类中的抽象方法不能使用override virtual等具有具体实现的关键字。
3、抽象类中的抽象方法,子类继承后,必须override重载。
4、抽象类不能直接进行实例化。
5、抽象类与普通类之间继承满足多态的继承关系。即:子类从父类继承,若子类没有进行重载,它就直接调用父类中的方法(即使在父类、子类、孙子类这样的多重继承关系中,也满足多态的继承特性)。
namespace接口抽象类测试
{
classProgram
{
static voidMain(string[] args)
{
interf2in2 = newclass1();
in2.hi();
in2.say();
abst2c2 = newclass3();
c2.abst2hi();
c2.abst2say();
c2.hi();
c2.say();
Console.ReadKey();
}
}
interfaceinterf1
{
voidsay();
}
interfaceinterf2:interf1
{
//new void say();
voidhi();
}
abstractclassabst1:interf2
{
public voidsay()
{
Console.WriteLine("abst1 say()");
}
public abstract voidhi();
//public override void say2()//不能一开始就override
//{
// Console.WriteLine("abst1 say()");
//}
}
abstract classabst2 : abst1
{
public override voidhi()
{
Console.WriteLine("abst2 hi()");
}
public virtual void abst2say()
{
Console.WriteLine("abst2 abst2say()");
}
public virtual voidabst2hi()
{
Console.WriteLine("abst2 abst2hi()");
}
}
classclass2 : abst2
{
public override void abst2say()
{
Console.WriteLine("class2 abst2say()");
}
}
classclass3 : class2
{
public override voidabst2hi()
{
Console.WriteLine("class3 abst2hi()");
}
}
classclass1 : abst1
{
public override voidhi()
{
Console.WriteLine("class1 hi()");
}
}
}