1、抽象方法
抽象方法是用abstract修饰的方法,只能声明不能实现,抽象方法必须被声明在抽象类里(反过来,抽象类里不一定要有抽象方法),抽象方法的的作用就是强制子类实现该抽象方法(如果子类不是抽象类的话)。

2、实例方法
可以用对象引用调用的方法都可以称作实例方法,实例方法必须在对象实例化之后,通过对象引用来调用。

3、静态方法
即不需要对象实例就可以调用的方法,也叫做类方法,可以通过类名直接调用。

4、虚方法
可以被覆写(Overriding)的方法都可以称作虚方法,因此虚方法并不需要做特殊的声明,也可以理解为除了用static、final、private修饰之外的所有方法都是虚方法。

虚方法出现在Java的多态特性中,父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。

当设计类时,被重写的方法的行为怎样影响多态性。方法的重写使得子类能够重写父类的方法。当子类对象调用重写的方法时,调用的是子类的方法,而不是父类中被重写的方法。

Java虚方法你可以理解为java里所有被overriding的方法都是virtual的,所有重写的方法都是override的。

在JVM字节码执行引擎中,方法调用会使用invokevirtual字节码指令来调用所有的虚方法。

5、总结抽象类和接口的区别
1、抽象类可以有方法体,接口必须是方法声明。
2、可以把接口看成是更纯粹的抽象类。
3、他们都不可以被实例化,但可以完好的使用多态。