虽然在java中不存在非虚函数,因为java的所有类中的函数都是虚函数。但是我们还是要讨论一下C类语言和java类语言中的这三个概念。我们采用从不抽象到抽象的顺序去说。
非虚函数和虚函数
这两个比较相似,就放在一起说了
非虚函数也就是正常没有被声明为virtual的函数(在C类语言中是如此,在Java中未生命的都是虚方法)
非虚函数和虚函数都可以被子类重写。但是在子类继承父类之后如果子类对象强制转换成父类,那么通过此对象调用虚方法是是用的子类的方法,而非虚方法是父类的方法。除此之外虚函数的调用开销要大于普通函数,但是现在纯oop语言所有类的成员方法默认都是虚方法了。
创造虚方法的目的就是为了更好的实现多态性,使得在使用的时候不需要考虑子类和父类实现方法和使用方法有什么不同,只需要完全按照父类的实现方法去操作就可以
抽象函数
抽象函数就是只声明一个函数的形式以及调用方法,不声明具体实现,所有子类必须实现抽象方法。