虚方法的关键字是virtual
抽象方法的关键字是abstract
重写都是override 虚方法也可以new
虚方法和抽象方法的区别:
虚方法:可以在抽象类和非抽象类中定义,可以写在父类中,在子类中可以被重写,在定义虚方法时必须实现虚方法
(在定义虚方法时需要写实现方法的代码或者至少要写一个分号)
抽象方法:必须定义在抽象类中,必须写在父类中,在子类中必须被重写,在定义抽象方法时不能实现方法
(在定义抽象方法时不能有大括号和代码)
注:如果我们实现的这个功能它的一部分功能(输出)要写在父类中,而且在不同的子类中需要重写,那么在父类中的方法必须定义为虚方法,
否则,如果在父类中只需要指定有什么功能,但不需要实现,这个时候我们就把父类中的方法定义为抽象方法。
说说抽象类的理解吧:
既然是抽象类,那么就是对事物的抽象描述,它描述的是个体的共性。那马这种动物来说,我们所说的马就是一个抽象类。世界上存在很多种马,白马,黑马,红马......如果没有抽象的概念,我们就没法获得世界上所有马,因为我们要说马的时候,必须指定是哪种马!但是我们其实是有抽象的概念的,我们定义了马这样的一个概念,用来指代世界上所有的马。但马在这个世界上并不是真实存在的,你所能看见的马一定是某一种类型的马!
所以说,抽象类就是这样一种类,描述了一种事物的共性,它不能实例化,只能通过它的子类实例化。
抽象方法:抽象方法一定是抽象类里面的,抽象的方法没有主体,就是没有实现代码,它的实现是由子类实现的。如果一个抽象类里面全是抽象方法的画,那么这个类和接口的功能基本就是一致,而抽象类和接口不一样的地方就在于抽象类可以有非抽象的方法。
virtual 关键字用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。