要了解虚方法首先要弄清两个概念:运行时类型和编译时类型
运行时类型:在虚方法调用中,该调用所设计的那个实例的运行时类型确定了要调用的究竟是该方法的哪一个实现。
编译时类型:在非虚方法调用中,相关实例的编译时类型是决定因素。
简单的说就是当非虚方法时就直接调用该方法,否则就调用该虚方法派生的程度最大的那个。