虚方法和抽象方法同样实现了多台机制
·抽象方法本身是一个隐含的虚方法 用法类似
抽象类只能是一个基类(父类)抽象类中的抽象方法只能声明 实现必须在子类的重写方法来实现----------不能被实例化,因此,正确定义其构造函数就非常重要。---------构造函数修饰符必须是protected或者private
抽象方法必须声明在抽象类中
抽象方法不能为private 它是一个隐式的虚方法 没有方法体
抽象类不能使用sealed
4.从抽象类中派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实现
abstruct class A
{
public abstruct void F();
}
class B:A
{
public overried void F(){}
}
虚方法:
一个类的成员被定义为virtual,就意味着它在告诉自己的子类:我准备了一笔遗产,你可以全盘接受,也可以完全拒绝或者修改我的遗嘱。显然,虚方法授予子类的权利甚至大于抽象方法。子类面对抽象方法只有重写(override)的权利,而对于虚方法,它还可以选择完全继承-----虚方法破坏了对象的封装性。
虚方法必须有实现部分,并为派生类提供了覆盖该方法的选项
//抽象方法
public abstract class A
{
public abstract void a();
public abstract void b();
}
//虚方法
public class AA
{
public virtual void aa(){}
public virtual void bb(){}
}
区别:
抽象方法只能在抽象类中声明,虚方法则不是
抽象方法必须在派生类中重写,虚方法则不必
抽象方法不能声明方法体,虚方法则可以
包含抽象方法的类不能被实例化,包含虚方法的类能够被实例化